N-PN White-Hat Project
[Python] MOD pour BOT Envoi photo cam par mail - Version imprimable

+- N-PN White-Hat Project (https://dev.n-pn.fr/forum)
+-- Forum : Programmation (https://dev.n-pn.fr/forum/forumdisplay.php?fid=72)
+--- Forum : Langages interprétés (https://dev.n-pn.fr/forum/forumdisplay.php?fid=27)
+--- Sujet : [Python] MOD pour BOT Envoi photo cam par mail (/showthread.php?tid=2703)



[Python] MOD pour BOT Envoi photo cam par mail - thxer - 15-02-2013

Bon je prévient je code en mode "salasse" Dodgy

Ce mode est basé sur le script bot de supersnail
Code PYTHON :

#!/usr/bin/python
#-*- coding: utf-8 -*-

import loader # Du script de supersnail
import urllib


import smtplib
import os
import sys
import time
import urllib2
from time import asctime
from email import Encoders
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.utils import formatdate
import datetime

def sendTextMail(message, chan, nick, ident, s):
   
    s.send("PRIVMSG " + chan + " :" + message[8:].rstrip() + ": Camera CONNECTION -OK-\r\n")
    fromaddr = "exemple@gmail.com"
    mto = "exemple@gmail.com"    

    sujet = "Screenshot"
    codage='UTF-8'
    corps=""
   
    #ICi c'est le screen-shot je suis sous XFCE / Le -w permet de prendre la fenetre active| On l'ouvre avec firefox pour qu'elle soit stocké dans le /tmp
    shot = os.system("xfce4-screenshooter -w -m -o firefox ")
    heure = str(asctime())
    heure = heure.split(' ')
    heure = heure[3]
    heure = str(heure)
    heure = heure.split(':')
    sec = int(heure[2]) - 1
    if sec < 10 :
        sec = "0"+str(sec)
    heure = str(heure[0])+":"+str(heure[1])+":"+ str(sec)
    print heure
    print ('Capture effectuée ')
    print("|=>   | 25% ")
   
   
   
   
     
    now = datetime.date.today()
    now_propre= str(now)
    now_propre= (now_propre.split('-'))
    now = now_propre[2]+now_propre[1]+now_propre[0]
   
    msg = MIMEMultipart('alternatives')
    msg['From'] = fromaddr
    msg['To'] = ', '.join(mto)
    msg['Cc'] = ', '
    msg['Bcc'] = ', '
    msg['Date'] = formatdate(localtime=True)
    msg['Subject'] = sujet.encode(codage)
    msg['Charset'] = codage
    msg['Content-Type'] = 'text/' + "plain" + '; charset=' + codage
    msg.attach(MIMEText(corps.encode(codage), "plain", _charset=codage))
    part = MIMEBase('application', "octet-stream")
# C'est l'algo qui permet d'anticiper le futur nom du screen shot
    screen = "/tmp/Capture d'écran - "+ now + " - "+ heure +".png"
    screen2 = "filename=\""+screen+"\""
   
    try :
        part.set_payload( open(screen,"rb").read())
    except IOError :        
        s.send("PRIVMSG " + chan + " :" + message[8:].rstrip() + ": What's the fuck ? y'à une merde maître ! -> Retry ; )\r\n")
        sendTextMail(message, chan, nick, ident, s)
           
   
    Encoders.encode_base64(part)
    part.add_header('Content-Disposition','attachment', filename=str(screen2))
    msg.attach(part)
   
    mail = msg.as_string()
    destinataires = mto

   
   
   
       
   
   
    print ('Destination ScreenSho07 => ' + screen + " ")
    print("|==>  | 50% ")
   
    smtp = smtplib.SMTP('smtp.gmail.com')
    smtp.ehlo()
    smtp.starttls()
    smtp.ehlo()
    smtp.login(fromaddr,'Votre_mot_de_passe')
   
    print ("LOGIN : -[OK]- ")
    print("|===> | 75%")
    smtp.sendmail(fromaddr,mto,mail)
    print("MAIL : -[COMPLETE]- ")
    print("|-----| 100 %")
    smtp.close()
   


def public_hand (message, chan, nick, ident, s):
   


         
    if(message[0:4] == "?cam" and nick == "votre_nick"):
        s.send("PRIVMSG " + chan + " :" + message[8:].rstrip() + " Ok Maître je connecte la camera \r\n")
        os.system("nohup vlc v4l2:///dev/video0 & ")
        os.system("sleep 3 ")
   

        sendTextMail(message, chan, nick, ident, s)
        s.send("PRIVMSG " + chan + " :" + message[8:].rstrip() + " Mail envoyé maître !\r\n")
       
    if(message[0:7] == "?cam" and nick != "votre_nick"):
        s.send("PRIVMSG " + chan + " :" + message[8:].rstrip() + " Serieusement ... T'as un bug dans la matrice ...\r\n")
 

def init_module():
    loader.add_message_handler(public_hand)

def unload_module():
    loader.delete_message_handler(public_hand)
 


A vous de l'améliorer Wink


RE: [Python] MOD pour BOT Envoi photo cam par mail - supersnail - 15-02-2013

Sympa ton truc, et assez funky ton trick avec vlc et le screenshot pour choper la caméra :')

Y'a ptet une lib de récupération de vidéos/webcam qui existe sous python, why not creuser cette piste Wink


RE: [Python] MOD pour BOT Envoi photo cam par mail - InstinctHack - 15-02-2013

@freecrack ne regarde pas ce code sinon tu vas te faire mal :')
Code PYTHON :

#!/usr/bin/python
#-*- coding: utf-8 -*-

import os,time,sys
from datetime import datetime


#os.system permet de lancer une commande shell via python

def capture_webcam(peripherique):
    """
        On définie un dictionnaire qui contient les paramètres qu'on veut accepter,
        et la command qui va etre lancer en fonction de lui...
    """

    bout_command=["xfce4-screenshooter "," -mo ./cam.py"]
    peripheriques={
        "screen_full":bout_command[0]+"-f"+bout_command[1],
        "screen_windows":bout_command[0]+"-w"+bout_command[1],
        "webcam":bout_command[0]+"-w"+bout_command[1]
    }

    """
        On définie les messages qui seront envoyés à chacune des étapes
    """

    msgs=[
        "|>       | Ok Maître je connecte le peripherique",
        "|==>     | Vlc tourne",
        "|===>    | Screenshot sauvegarder ici : ",
        "|======> | Désactivation de VLC effectué",
        "|========| Tout est fin car j'ai pas fait l'envoi du mail"
    ]

    if peripherique in peripheriques: #Si le périphérique est bon
        print(msgs[0])
        """
            Si c'est la webcam qu'on veut, faut lancer vlc
        """

        if peripherique=="webcam":
            """
                nohup est un programme qui permet d'en faire tourner d'autres en background
                cvlc est simplement la version sans interface de vlc (genre il y a que le cadre, ça fait plus jolie)
                v4l2:///dev/video0 est le flux qu'on veut lire
                & fait parti de la commande nohup
            """

            os.system("nohup cvlc v4l2:///dev/video0 &")
            time.sleep(3)
            print(msgs[1])

        """
            On effectue la commande en fonction du périphérique
        """

        os.system(peripheriques[peripherique]+" 2> /dev/null")

        time_start=int(time.time())
        number=0
        path_file_base=["/tmp/Capture d'écran - ",".png"]
        path_file=""
        while os.path.isfile(path_file) is False:
            date_formatee=str(datetime.fromtimestamp(time_start-number))
            elements=date_formatee.split(' ')
            date=elements[0].split('-')
            date.reverse()
            path_file=path_file_base[0]+''.join(date)+" - "+elements[1]+path_file_base[1]
            number+=1

        print(msgs[2]+path_file)

        """
            Si c'est la webcam qu'on veut, faut kill vlc désormais
        """

        if peripherique=="webcam":
            os.system("ps x | grep vlc | cut -f 1 -d ' ' | xargs kill")
            print(msgs[3])

        print(msgs[4])

        os.system('mv "'+path_file+'" "'+'/home/khaled/LIFE/Informatique/Programmation/Python/bot_irc/Infinity/actuel/documents/functions/'+path_file.split("/")[-1]+'"')
        sys.exit()


"""
Pour que le le programme se lance il faut lui passer un parametre selon cette liste de choix
screen_full
screen_windows
webcam
"""


if len(sys.argv)>=2:
    capture_webcam(sys.argv[1])


# Voilà un bout de code mais vu qu'il dépend du bot sur lequel il s'éxécute, donc voilà....

"""
if message[0] == "?":
    print("C'est une commande")
    if(message[1:].split(' ')[0]=="cam"):
        if nick == "votre_nick":
            print("Ok Maître je connecte la camera")
            os.system("nohup vlc v4l2:///dev/video0 & ")
            os.system("sleep 3 ")

            sendTextMail(message, chan, nick, ident, s)
            print("Mail envoyé maître !")
        else:
            print(" Serieusement ... T'as un bug dans la matrice ...")
    else:
        print("Visiblement la cam ne t'interesse pas...")
else:
    print("C'est pas une commande")

"""

 



RE: [Python] MOD pour BOT Envoi photo cam par mail - thxer - 18-02-2013

Bien corrigé, le côté funky me manque mais c'est propre Shy