01 - Plugins

Hur man skapar plugins till Blinkenbot


Grudläggande


Det hela är ganska enkelt, utgå från följande mall och ändra efter behov. En förklaring av vad sakerna gör kommer efter koden.

  1.  
  2. # -*- coding: iso-8859-1 -*-
  3. import threading
  4.  
  5. class Exempel(threading.Thread):
  6. """ Exempelklass i trådformat """
  7. def __init__(self, conn, reciver, msg):
  8. threading.Thread.__init__(self)
  9. self.conn = conn
  10. self.reciver = reciver
  11.  
  12. def send(self, string):
  13. """ Skicka meddelande """
  14. self.conn.send('PRIVMSG '+ self.reciver +' :'+string+'\r\n')
  15.  
  16. def run(self):
  17. """ Kör tråden """
  18. self.send("Hello world!")
  19.  
  20.  
  21. def run(conn,reciver,msg,sender,obj):
  22. """ Run plugin """
  23. print "Exekverar exempelplugin..."
  24.  
  25. obj = Exempel(conn,reciver,msg)
  26. obj.start()
  27.  
  28.  
  29. def commands(self):
  30. """Hej!"""
  31. pass
  32.  
  33.  
  34. def help(self):
  35. """ Skriv "Hej!" i kanalen så svarar boten! """
  36. pass
  37.  


Run-funktionen är den som anropas från boten, och det är alltså där prommet börjar exekvera. Run-funktionen tar fem argument, conn, reciver, msg, sender och obj.
Conn är objektet som håller i anslutningen till IRC, och det är genom det objektet som man skickar meddelanden till kanalen eller andra användare.
Reciver är platsen som returmeddelande skall skickas till. Om någon i kanalen skickade meddelandet så är det kanalnamnet som kommer här, kom meddelandet i ett pm så är det persones nickname.
Msg är innehållet i meddelandet som användaren skickade.
Sender är personen som skickade meddelandet. Om någon i en kanal skickade meddelandet så är det personens namn, inte kanalnamnet som kommer här (skillnad mot reciver).
Obj är ett objekt som man sparar trådobjektet i. Detta är för att tråden skall kunna fortsätta exekvera även när själva koden i pluginet inte körs längre.

Commands-funktionen innehåller en doc-sträng med vilka kommandon man kan använda för att exekvera pluginet. Om det står """.tv""" så kommer alla meddelanden som innehåller .tv skickas till pluginet, det skulle nämligen bli lite ansträngande om alla meddelanden skickades till alla plugins.

Help-funktionen innehållen en doc-sträng med den information som kommer visas upp för användaren om denne begär hjälp om hur man använder pluginet.

Anledningen till att pluginet skapar en ny tråd är att det kan bli lite osmidigt om man t ex försöker hämta information från en webbsida, och har en timeout på några minuter, då kommer nämligen hela botens verksamhet stanna upp tills nätverksanslutningen har timeout:at om man inte kan få tag på webbsidan. Har man ett enkelt plugin behöver man inte skapa en ny tråd, det tar bara onödigt med processorkraft att skapa och lägga ner trådar stup i kvarten.

Exekvering vid tidsintervall


Boten stödjer plugins som exekveras vid speciella tidsintervall. För att aktivera detta så skall de två första raderna under kommentaren "# Run program" i main.py avkommenteras (dvs ta bort #-tecknet framför raderna).
För att använda funktionen skapar man sedan en funktion som ser ut såhär i sin plugin:
  1.  
  2. def timed(conn,reciver):
  3. """ Exekveras lite då och då """
  4. print "Running timed function..."
  5.  
  6. conn.send('PRIVMSG '+ reciver +' :Hej!\r\n')


Denna kom kommer skriva ut "Hej!" i kanalen lite då och då, hur ofta bestäms utav koden i main.py. Den är för tillfället inställd på en gång per timma, men en gång per minut eller var tionde minut kommer användas när tävlingen avgörs.
Självklart kan man själv implementera en koll i sin plugin som gör att pluginet bara skickar data en gång per dag, eller endast om något speciellt villkor har uppfyllts.
Argumenten till timed-funktionen är conn och reciver. Conn är kopplingen till IRC-objektet, och används för att skicka data till IRC. Reciver är kanalen som boten befinner sig i.

-vrigt


,,r det något som är oklart så kan ni ju alltid fråga i chatten, är jag inte där så går mail bra såklart.

Lycka till alla! Hoppas det kommer några inovativa plugins nu! Smiley

Källa: http://blinkenlights.se/