PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Gelöst] Mehrzeiliges einlesen aus IRC?


brahma
13.04.2005, 19:09
So, mein eggdrop nimmt langsam Form an, aber nur der allgemeine Teil.

Da ich im IRC hauptsächlich wegen des Onlinespiels die-Ewigen unterwegs bin, soll der Bot natürlich auch dafür geeignet sein...
Jetzt möchte ich in einer DB. z.B. Daten zu spielern einlesen, des komforts wegen direkt per copy und paste aus dem browser.

es würde also in den chan gepostet werden:

Bla-Bla-Bla-text $wert1 ($wert2:$wert3)
$wert4

Aber wie lesen ich das ganze dann ein? einzeilig kriegte ich ja noch hin, aber zweizeilig?

Eine anderen Anwenung wäre z.B. den Status bei einem Angriff auszulesen, würde dann so inx IRC kopiert:

Systemstatus von 265:6
ETA: 6 INC: 3.894.558 DEF: 1.069.012 (1:0,3) DEF(3): 1.069.012 (1:0,3)
Angreifer: (ETA6) 267:2

wobei der Bot dann mehrere Angaben verarbeiten soll aus dem Thema, und die Zeilenzahl bei ETA ist variabel, bis zu 12 Zeilen....

Jemand eine Idee, einen Tip oder sowas schonmal irgendwo gefunden? Für mIRC gibts das zur genüge, aber mIRC-SCripts kann ich ja net gebrauchen.....


ind00r
13.04.2005, 20:34
Du musst halt schauen was in der Zeile steht wo nur einmal vorkommt.

Systemstatus von 265:6
ETA: 6 INC: 3.894.558 DEF: 1.069.012 (1:0,3) DEF(3): 1.069.012 (1:0,3)
Angreifer: (ETA6) 267:2

Also "Systemstatus" "ETA" und "Angreifer"

einfach ein bind auf "Angreifer" u.s.w. und dann die Daten auslesen und in die Datenbank speichern.

brahma
14.04.2005, 17:19
Ja klar, aber wie mach ich dem eggi klar, das er dann vom die Daten aus der zweiten Zeile dazu zählen soll, es geht mir ja erstmal um den Teil:

Bla-Bla-Bla-text $wert1 ($wert2:$wert3)
$wert4

weil ich den irgendwie nicht realiert bekomme..... :confused:

ind00r
14.04.2005, 21:57
es gibt nur eine Zeile wo man auslesen kann.
Entweder musst du die Admins vom Spiel anschreiben das die das anders Darstellen sollen ;)
oder du musst dafür sorgen das das in einer Zeile gepastet wird
oder du liest jede Zeile doch einzeln aus, dazu muss halt wie gesagt ein "schlagwort" da sein.

Mir ist nicht bekannt das man 2 Zeilen aufeinmal auslesen kann.

brahma
14.04.2005, 22:23
Ja, sagen wir mal so, meine überlegung war bisher so, wenn das in den chan gepostet wird, macht der bot quasi das:

if "systemstatus von" then read next line from $nick as $arg4 in etwa.....

um das ganze mal zu formulieren..... :p

ChaosKrieger
15.04.2005, 08:22
moin,

also ich würde es so machen:
set stat false
bind pubm ...
global nick
stat checken -> wenn false systemstatus, true auf alles andere
channel checken->
text checken "systemstatus von"
set stat true
set nick nick
else
nick checken->
ausgabe checken ->
wenn etwas "richtiges" da steht speichern.. ansonnsten stat wieder false



hab es extra so geschrieben... sonnst könnt ich dir das script auch gleich schreiben , und das will ich nicht :D



By Chaos

brahma
15.04.2005, 10:33
Hm, da muss ich zwar noch viel selber denken, aber erstmal reicht mir die Lösungsidee, will ja TCL lernern..... :D

Oh, jetzt ist dat klar, hab die ganze Zeit falsch herum gedacht, wieso soll der Bot da aktiv werden? :mauer:
Der liest doch eh alles im chan mit, dann muss ich ja quasi nur nach der Quelle der eingaben checken und diese "sortieren" und nicht den Bot dazu bringen sozusagen die nächste Zeile von diesem User einzuziehen, klar...... :rolleyes:

Ich versuchs mal, entweder das wird was oder ich frag euch direkt weiter löcher in den bauch.... :D

brahma
06.06.2005, 16:43
So, muss das Thema mal wieder aufgreifen, bin endlich dazu gekommen weiterzumachen.... http://coding-board.de/board/images/smilies/biggrin.gif

kann ich eigentlich auch ein Bind auf mehrer Worte setzen?

Momentan benutze ich das bind so:

bind pub - Allianztag allysave

Aber da "Allinaztag" ja nur ein Wort ist, das sicher auch noch anders gebraucht wird, wäre es besser wenn der Bot auf mehrere Wörter reagieren würde, deswegen die Frage ob das geht:

bind pub - "Allianztag von" allysave

Desweiteren, wie "lösche" ich am Besten Klammern aus einem Ausdruck?

Hab ja folgenden Ausdruck:

Bla-Bla-Bla-text $wert1 ($wert2:$wert3)

und zerlege ihn mit (rest ist was eingelesen wird):

set zeilenlist [split $rest " "];
set name [lindex $zeilenlist 1];
set koords [lindex $zeilenlist 2];

hab also folgende Werte:
$name = $wert1
$koords = ($wert2:$wert3)

Nur jetzt muss ich $koord noch weiter zerlegen, mache das mit:

set erg [split $koords ":"];
set sek [lindex $erg 0]
set system [lindex $erg 1]

Nur dabei bekomme ich $sek = ($wert1 und einmal $system = $wert2), wobei die Klammern natürlich über sind! Wie kriege ich die Weg?

ChaosKrieger
06.06.2005, 17:12
moin,

mehrere binds? -> ja
klammern "löschen" -> ja, mit regsub, oder string map, (beides ok)

bei weiteren fragen einfach melden,

Bye Chaos

brahma
07.06.2005, 12:03
Also mit regsub komm ich irgendwie nicht klar, beides geht net:

regsub -all "\(" $koords " " koords
regsub -all "\)" $koords "" koords

Habs dann jetzt so gelöst:

set koords [string map {\( \ \) \ } $koords]

Nur ersetzt der mir natürlich jetzt die Klammer durch Leerzeichen, was unschön ist. Wie kann ich das ändern/umgehen?

ChaosKrieger
07.06.2005, 16:14
mit "" ;)

brahma
07.06.2005, 17:39
Meinste so?

set koords [string map {\( "" \) ""} $koords]

Kann das leider gerade nicht testen, weil ich nicht per zum Bot durchkomme durch diesen blöden Proxy.... http://coding-board.de/board/images/smilies/mad.gif