Advertisement
Guest User

Untitled

a guest
Jun 18th, 2013
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.78 KB | None | 0 0
  1. import random
  2. import time
  3. import _thread as thread
  4. import sqlite3
  5. from socket import *
  6. #####################################
  7. IRCHOST = 'xs4all.nl.quakenet.org'  
  8. IRCPORT =  6667                    
  9. IRCUSER = 'pl3kbot * * : bestaboteva'
  10. IRCNICK = 'botbotbotbotbot'                
  11. IRCchannel = '#supertest'        
  12. #####################################
  13.  
  14. joined_channel = False
  15.  
  16. def timestamp():
  17.     """Gibt einen String mit der Aktuellen Zeit zurück"""  
  18.     zeit = time.localtime()
  19.     """(Jahr - Monat - Tag- Stunde - Minute - Sekunde)"""
  20.     zeitstring = str(zeit[3])+":"+str(zeit[4])+":"+str(zeit[5])+" "+str(zeit[2])+"."+str(zeit[1])+"."+str(+zeit[0])
  21.     return zeitstring
  22.  
  23. def konsolen_ausgabe(nachricht):
  24.     zeit = timestamp()
  25.     print(zeit, nachricht)
  26.  
  27. def datenbank_verlauf(nick, nachricht, event):
  28.     if event == "leave":
  29.         pass
  30.     elif event == "join":
  31.         pass
  32.     elif event == "send":
  33.         pass
  34.  
  35. def pingpong(message):
  36. # Antwortet auf den Ping
  37.     pong = message.split(":")
  38.     con.send("PONG :" + pong[1])
  39.  
  40.    
  41. # Überprüft die eingegangenen nachrichten und verarbeitet diese weiter
  42. def controller(message):
  43.     # Globale Variable Importieren
  44.     global joined_channel
  45.     konsolen_ausgabe(message)
  46.     # Überprüft auf PING
  47.     if message.startswith("PING :"):
  48.         pingpong(message)
  49.     #Überprüft auf authentifizierung und joined dem channel
  50.     if joined_channel == False:
  51.         if message.split(" ")[1].startswith("221"):
  52.             con.send("JOIN " + IRCchannel)
  53.         if message.split(" ")[1].startswith("353"):
  54.             joined_channel = True
  55.     # Checkt ob jemand joined oder leaved
  56.     if message.startswith(":") and message.find("QUIT") != -1:
  57.         nick = message.split("!")[0][1:]
  58.         datenbank_verlauf(nick, "CHANNEL VERLASSEN", "leave")
  59.     if message.startswith(":") and message.find("JOIN") != -1:
  60.         nick = message.split("!")[0][1:]
  61.         datenbank_verlauf(nick, "CHANNEL BETRETEN", "join")
  62.     # Prüft ob ein User etwas geschrieben hat
  63.     if message.find("PRIVMSG") != -1:
  64.         #Extrahiert den Nick aus der message
  65.         nick = message.split("!")[0][1:]
  66.         #Extrahiert die Nachricht aus der message
  67.         nachricht = message.split("PRIVMSG")[1].split(":", maxsplit=1)[1]
  68.         #Schickt die nachricht an die Verlaufmethode
  69.         datenbank_verlauf(nick, nachricht, "send")
  70.         #Überprüft ob der Bot angesprochen wurde
  71.         if nachricht.find(IRCNICK) != -1:
  72.             con.send("PRIVMSG {} :LASS MICH IN RUHE {} !!!".format(IRCchannel, nick))
  73.  
  74. class connection:
  75.     # Konstruktor
  76.     def __init__(self, ho, po, us, ni):
  77.         self.HOST = str(ho)
  78.         self.PORT = int(po)
  79.         self.USER = str(us)
  80.         self.NICK = str(ni)
  81.         # Socket Objekt erstellen
  82.         self.s = socket(AF_INET, SOCK_STREAM)
  83.         # Dateireferenz vom Socket erstellen
  84.         self.fs = self.s.makefile("rw")
  85.     # Verbindung Herstellen
  86.     def connect(self):
  87.         # Socket verbinden
  88.         self.s.connect((self.HOST, self.PORT))
  89.         # Beim Server anmelden
  90.         self.fs.write("PASS " + str(random.random()) + "\n")
  91.         self.fs.write("USER " + self.USER + "\n")
  92.         self.fs.write("NICK " + self.NICK + "\n")
  93.         self.fs.flush()
  94.     def receive(self):
  95.         while True:
  96.             # sendet die empfangenen daten an die controller methode
  97.             # ohne escape sequenz
  98.             message = self.fs.readline()[:-1]
  99.             controller(message)
  100.  
  101.     def send(self, nachricht):
  102.         try:
  103.             self.fs.write(nachricht + "\n")
  104.             self.fs.flush()
  105.         except:
  106.             print("Fehler beim senden der Nachricht!")
  107. con = connection(IRCHOST, IRCPORT, IRCUSER, IRCNICK)
  108. con.connect()
  109. thread.start_new_thread(con.receive,()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement