Author Topic: [Python] XMPP Chat-Bot  (Read 5055 times)

fraggle

  • the breaker
  • Global Moderator
  • Apache
  • *****
  • Posts: 118
  • Karma: +17/-0
    • View Profile
[Python] XMPP Chat-Bot
« on: January 05, 2014, 12:28:14 am »
Wie ihr vielleicht im Public MUC mitbekommen habt habe ich die SleekXMPP Library getestet um mal zu schauen wie das so läuft. Habe vor ein paar Wochen nur grob drüber geschaut und muss sagen das ich das bereut habe da es den Kommunikations-Teil wesentlich simpler und kleiner hält als andere Libraries. Da puddy ja auch immer wieder die Lust verspürt einen Chat-Bot zu entwickeln und hier die meisten von uns sich auch in Python auskennen wäre das vielleicht ein nettes Projekt einen "zweiten HAL" zu entwickeln  8)

Hängt einfach mal eure Ideen hier mit rein und wer lust hat mitzumachen ist gerne willkommen!

GitHub-Repository: https://github.com/phcn/XMPPBot
Library : http://sleekxmpp.com/

ToDo:
Legende
Priorität:
+ = Sehr wichtig!
o  = wichtig. Aber nicht sooo sehr wichtig.
- = Nicht wichtig. Wenn es ncihts wichtiges gibt.

XMPPBot - Core
Quote
+ Laden der Features über eine Konfigurationsdatei ermöglichen
   http://stamat.wordpress.com/2013/06/30/dynamic-module-import-in-python/
   http://stackoverflow.com/questions/301134/dynamic-module-import-in-python
   http://stackoverflow.com/questions/4821104/python-dynamic-instantiation-from-string-name-of-a-class-in-dynamically-imported

+ Der Bot soll nur reagieren wenn man ihn direkt anschreibt und nicht wenn man ihn  nur erwähnt
o Statt automatisch immer die unterstützten Featuers anzuzeigen könnte man wie bei HAL eine
   Antwort zurückliefern, die aus einer geskripteten AI stammt (PyAIML - http://pyaiml.sourceforge.net/)
   Btw MegaHAL ist die AI Engine die hal verwendet, dafür gibt es auch ein Python Port (http://code.google.com/p/halpy/)

o Unterstützte Features über "help" anzeigen
- Ähnlich wie bei BitchX kann bei Start immer ein zufälliges Logo ausgewählt werden (ANSI/ASCII-Art)
  z.B. mit Colorama https://pypi.python.org/pypi/colorama
o In der Konfigurationsdatei ein Bereich [Admins] in der User eingetragen sind, die Administrative-Funktionen
   ausführen können

o add() - Ähnlich wie bei hal sollen Admins (siehe Config) in der Lage sein Features zu erweitern, dementsprechend
  sollte es auch ein remove() geben :)
+ Sich Gedanken über mögliche Fehler/Konflikte machen und entsprechende Änderungen vornehmen (z.B. was soll passieren wenn zwei Features gleich heißen bzw. zwei mal das selbe Keyword gescannt wird?)
o Wie soll man Features einbauen die nicht Bernd direkt ansprechen,
   z.B. das Knock, Knock oder Monkey Island Feature, idealerweise
   sollte man hier auch weiterhin Feature-unabhängigen Code im 
   Core-Teil schreiben, das solche Features berücksichtigt

XMPPBot - Features
Quote
o ImbissFeature - Neben Getränken soll der Bot nun auch Fastfood liefern!!!11
- https://board.phcn.net/index.php?topic=78.msg419#msg419
- Wenn einer ein youtube Link im MUC postet soll der Bot den Titel und das Rating vom Video posten
- RussischRoulette: Wer erschossen wird, wird ausm MUC gekickt
- TV-Feature: Bernd: tv sat1/pro7/rtl -> Bernd: Auf SAT1/Pro7/RTL läuft gerade - Foobar
- Youtube Feature: Bernd: ytube <video-id> -> Bernd: Direkter Download-Link des Videos
- Bahn Feature: Bernd: bahn <start> <destination> -> Bernd: Nächster Zug fährt um xy:z Uhr (vielleicht noch weitere Infos) http://mobile.bahn.de/
- http://www.codecademy.com/tracks/apis
- Bit.ly Feature: Bernd: bitly <longurl> -> Bernd: Bit.ly URL => <short-url>
- v.ly Feature: Bernd: vly <longurl> -> Bernd: v.ly URL => <short-url>
- MD5 Lookup Feature: Bernd: md5lookup <md5hash> -> Bernd: <md5hash> == <plaintext>
- Random Feature: rand <val1>,<val2>,...<valn> -> Bernd: <val>
- Game Feature: Für irgendwelche Online-Spiele wie z.B. TeamFortress 2 Server-Stats anzeigen oder foobar
- PHCNBoard Feature: Benachrichtigung über neue Beiträge
- MangaRelease Feature: Benachrichtigung über neue Chapter Releases (In einer Config kann jeder Nutzer bestimmte Chapters eintragen, so kriegt jeder eine individuelle Nachricht)
- give it a btc wallet. Make it request fees / donations for services. Let it hire programmers for new
- perform a search for song lyrics
- dot + single word or phrase? Reply with translation englisch / German + spelling suggestions + origin of word
- how about various hashing and encryption features. Or a "send me some special characters" for easy copying
- create new email address, read mails, delete address.
- Make it manage your calendar + todo (with reminders, editing, moving..)
- Speech in/out interface
- Verbesserung für Roulette, moar random https://board.phcn.net/index.php?topic=78.msg453#msg453

Natürlich kann jeder mitmachen an dem Teil zu schrauben.
Sprache ist: Python 2.7 (wer Lust hat 3)
« Last Edit: February 07, 2014, 03:16:55 pm by freak_out »
May the Force be with you.

freak_out

  • Hoffnungslose Technikniete
  • Global Moderator
  • Network News
  • *****
  • Posts: 158
  • Karma: +31/-0
  • Von den Frühstücksflocken
    • View Profile
    • freak
Re: [Python] XMPP Chat-Bot
« Reply #1 on: January 05, 2014, 03:57:05 pm »
So RSS Zeugs wäre schon was feines.

Ansonsten halt vielleicht noch so Spielereien wie man sie von einigen IRC Bots kennt.

- Minibar
 „freak_out: !bier“
„*** Sucukbot geht zum Kühlschrank und eine kalte Flasche Bier heraus und überreicht sie freak_out“

- Russisches Roulett
usw.
« Last Edit: January 05, 2014, 04:06:13 pm by freak_out »

puddy

  • Global Moderator
  • Gopher
  • *****
  • Posts: 72
  • Karma: +18/-0
    • View Profile
Re: [Python] XMPP Chat-Bot
« Reply #2 on: January 06, 2014, 12:17:06 pm »
Mach mal ein git auf :3

freak_out

  • Hoffnungslose Technikniete
  • Global Moderator
  • Network News
  • *****
  • Posts: 158
  • Karma: +31/-0
  • Von den Frühstücksflocken
    • View Profile
    • freak
Re: [Python] XMPP Chat-Bot
« Reply #3 on: January 11, 2014, 06:23:51 pm »
Hab heute mal eine Minibar für den Bot geschrieben.
Laut den Test im MUC zu urteilen taugt es. Und wir die Tage im Github Repo auftauchen.

Habe außerdem auch ein PoC für Russisch Roulette zusammen geschustert like Schuster ;)
Scheint auch einigermaßen zu gehen. Aber ist noch nicht ganz fertig. Wird daher die Tage folgen.

freak_out

  • Hoffnungslose Technikniete
  • Global Moderator
  • Network News
  • *****
  • Posts: 158
  • Karma: +31/-0
  • Von den Frühstücksflocken
    • View Profile
    • freak
Re: [Python] XMPP Chat-Bot
« Reply #4 on: January 12, 2014, 01:51:00 pm »
Hab nun auch ein ImbissFeature eben gemacht. Ist ja eigentlich genau so wie das Barfeature

puddy

  • Global Moderator
  • Gopher
  • *****
  • Posts: 72
  • Karma: +18/-0
    • View Profile
Re: [Python] XMPP Chat-Bot
« Reply #5 on: January 12, 2014, 06:54:27 pm »
knock, knock jokes
wenn man "knock, knock" oder "klopf, klopf" schreibt, auch ohne Bernd: davor, geht er in den knock knock joke modus. das betrifft aber nur den user der den joke angefangen hat. bernd antwortet, natürlich in passender sprache, "who is there?", auf das nächste was dieser user schreibt antwortet er dann "x who?". ist für sehr einsame menschen die einen witz erzählen möchten. er merkt sich aber auch den gesamten joke, und wenn ihm lanweilig ist - oder jemand darum bittet - dann erzählt er den joke aber halt umgekehrt, so dass er mit knock knock beginnt


wenn man zb schreibt "du kämpfst wie ein dumemr bauer" sollte er dies mit einer datenbank aller monkey island beleidigungen cross checken und falls eine aussage zu mehr als 85 % auf eine der monkey island beleidigungen zutrifft, sollte er mit dem passenden gegenstück antworten.

freak_out

  • Hoffnungslose Technikniete
  • Global Moderator
  • Network News
  • *****
  • Posts: 158
  • Karma: +31/-0
  • Von den Frühstücksflocken
    • View Profile
    • freak
Re: [Python] XMPP Chat-Bot
« Reply #6 on: January 14, 2014, 02:17:59 pm »
Im Anhang findet ihr ein Snapshot vom Berndbot.

Der Bot hat folgendes features:
Code: [Select]
- feed (PoC von fraggle wird noch)
- beer (feature von fraggle. IMO überflüssig weil:)
- bar (PoC von freak_out. Minibar halt)
- imbiss (PoC von freak_out. Wie Bar nur mit Futter)
- roulette (PoC von freak_out. Russisches Roulette)

Weitere Änderungen:
Code: [Select]
- Bernd reagiert nur wenn man ihn direkt anschreibt. Heißt:
Bernd: bar bier
Bei erwähnungen wie: "Fecken Bernd!" reagiert er nun nicht mehr

Die Verbindungsdaten in der xmppbot.py bei:
Code: [Select]
   
jid = ""
password = ""
room = ""
nick = ""
eintragen.

Nächstes Ziel:
Gescheites Configfoo. Ist da wer schon dran?

fraggle

  • the breaker
  • Global Moderator
  • Apache
  • *****
  • Posts: 118
  • Karma: +17/-0
    • View Profile
Re: [Python] XMPP Chat-Bot
« Reply #7 on: January 14, 2014, 07:56:57 pm »
Wer zum ersten mal mit Git arbeitet -> http://try.github.io//levels/1/challenges/1
May the Force be with you.

fraggle

  • the breaker
  • Global Moderator
  • Apache
  • *****
  • Posts: 118
  • Karma: +17/-0
    • View Profile
Re: [Python] XMPP Chat-Bot
« Reply #8 on: January 16, 2014, 12:00:51 am »
Habe jetzt mal ein Feature-System geschrieben das nun ermöglicht über eine Config-Datei (bot.cfg) Features zu entfernen/hinzuzufügen.

Code: [Select]
[XMPP]
# xmpp account details
JabberID = foobar@phcn.de
Password = foobarbaz
Room = phcn@conference.phcn.de
Nickname = Bernd

[Administrators]
JabberIDs =
 foo@phcn.de;
 bar@phcn.de

[Features]
# add xmpp bot features
FeaturePaths =
 features/feedfeature.py;
 features/barfeature.py;
 features/imbissfeature.py;
 features/roulettefeature.py

Ich dachte mir da z.b. freak_out einige txt Dateien hat das man in solchen Fällen auch eigene Ordner unterhalb features erstellen kann und dann da alles reinschiebt (oder ganz woanders). Mit imp.load_source(DateiName, Pfad) wird dann das entsprechende Feature zur Laufzeit geladen. Achja und jetzt können auch die Account-Details in die Config eingetragen werden. Wie immer bei Verbesserungsvorschlägen oder Kritik einfach melden.

Wenn ihr ein Feature entwickelt dann könnt ihr euch nun an den anderen Features orientieren. Eine weitere Neuerung ist nun das der Bot nur noch die unterstützten Features anzeigt wenn es mit "help" angeschrieben wird.
« Last Edit: January 16, 2014, 09:11:15 pm by fraggle »
May the Force be with you.

fraggle

  • the breaker
  • Global Moderator
  • Apache
  • *****
  • Posts: 118
  • Karma: +17/-0
    • View Profile
Re: [Python] XMPP Chat-Bot
« Reply #9 on: January 17, 2014, 08:31:01 pm »
wenn man zb schreibt "du kämpfst wie ein dumemr bauer" sollte er dies mit einer datenbank aller monkey island beleidigungen cross checken und falls eine aussage zu mehr als 85 % auf eine der monkey island beleidigungen zutrifft, sollte er mit dem passenden gegenstück antworten.

Gibts den da sowas oder müsste man das erst erstellen? :)
May the Force be with you.

puddy

  • Global Moderator
  • Gopher
  • *****
  • Posts: 72
  • Karma: +18/-0
    • View Profile
Re: [Python] XMPP Chat-Bot
« Reply #10 on: January 17, 2014, 10:27:49 pm »
Gibt nen uncoolen twitter bot:
https://github.com/philnash/guybot
und ne Seite auf der man es zocken kann:
http://www.int33h.com/test/mi/
von der gibt es auch die sources:
http://www.int33h.com/test/mi/mi.zip
In den sources gibt es ne .xml mit Beleidigungen und comebacks auf allen Sprachen. Aber es gibt keine Schnittstelle, also muss man die Logik extra rauspfriemeln oder neu schreiben. Die Fehlertoleranz müsste man wohl ohnehin selbst schreiben. Eigentlich keine Herausforderung, nur bisschen nervig .. Immerhin haben wir einen Ort zum Ideen sammeln, vielleicht ist ja jemandem mal langweilig ;)

fraggle

  • the breaker
  • Global Moderator
  • Apache
  • *****
  • Posts: 118
  • Karma: +17/-0
    • View Profile
Re: [Python] XMPP Chat-Bot
« Reply #11 on: January 25, 2014, 01:36:13 pm »
Folgendes ist mir vorhin aufgefallen:

Quote
[13:14:15] <fraggle> Bernds Brain ist schon 3,7 MB dick
[13:14:17] <Bernd> Ja schon das habe ich schon verstanden.
[13:14:57] <fraggle> Bernds bar bier
[13:14:57] <Bernd> *** Bernd geht zum Kühlschrank und holt eine kalte Flasche Bier heraus und überreicht sie fraggle
[13:15:03] <fraggle> Berndx bar bier
[13:15:03] <Bernd> *** Bernd geht zum Kühlschrank und holt eine kalte Flasche Bier heraus und überreicht sie fraggle
[13:15:50] <fraggle> Berndabcd bar bier
[13:15:50] <Bernd> *** Bernd geht zum Kühlschrank und holt eine kalte Flasche Bier heraus und überreicht sie fraggle

Der Bot sollte in diesem Fall nur auf <Botnick>: reagieren (liegt denke ich am Regex).
May the Force be with you.

freak_out

  • Hoffnungslose Technikniete
  • Global Moderator
  • Network News
  • *****
  • Posts: 158
  • Karma: +31/-0
  • Von den Frühstücksflocken
    • View Profile
    • freak
Re: [Python] XMPP Chat-Bot
« Reply #12 on: January 25, 2014, 04:00:43 pm »


Bevor wir weiter machen sollten wir nun vielleicht erst einmal endgültig klären in was wir den Bot weiter schreiben. Python2 oder Python3?

Am Anfang hieß es ja Python3, aber fraggle hatte ja irgendwas reingebaut was in Py3 nicht gibt/ging oder so. Weißt du was das war fraggle?

Wäre ja schon dafür das wir bei Py3 bleiben.

13biersaft37

  • zu viel RL
  • *
  • Posts: 5
  • Karma: +2/-0
    • View Profile
Re: [Python] XMPP Chat-Bot
« Reply #13 on: January 25, 2014, 08:21:09 pm »
Was noch fehlt beim Bar feature sollte man auch Bier ausgeben können z.b. mit "Bernd: bar bier freak_out"  wäre supi

puddy

  • Global Moderator
  • Gopher
  • *****
  • Posts: 72
  • Karma: +18/-0
    • View Profile
Re: [Python] XMPP Chat-Bot
« Reply #14 on: January 26, 2014, 08:49:43 pm »
Sehe nichts was gegen Python 3 spricht. Hat jemand Erfahrung mit diesem "logging" Modul? hab mir das angesehen aber irgendwie tut das nicht wie ich möchte. Aber mir scheint es an sich eine gute Idee zu sein, da etwas zu haben. Dass gerade auch die Features still versagen, wenn sie versagen, finde ich weitgehend unpraktisch.