![]() |
Neunis IRC-Bot - Neue Version!
So, da ja letztens hier auch das Thema IRC-Bot war, hab ich mal einen kleinen gecodet.
Bis jetzt kann er auf Kommandos die im Chat eingegeben werden mit Text antworten. Was er bei welchem Kommando sagt, steht in der commands.irc Hierbei müssen alle Kommandos mit # anfangen, damit der Bot diese als Kommandos erkennt. (<-- Kann man aber auch im Source umstellen ;)) Andere Sachen (Wetter auslesen oder so) Kann man ja einfach noch hinzufügen, indem man je nach Kommando nicht aus der Textdatei die Antwort holt, sondern einen Code ausführt. Soo, nu will ich nicht weiter nerven. Probierts einfach aus :) Viel Spass! EDIT: Ich nap hab vergessen den Source anzuhängen :wall: Neue Version! Siehe unten. |
Re: Neunis IRC-Bot
Anstatt
Delphi-Quellcode:
würde doch auch einfach nur
procedure TForm1.ircReceive(Sender: TObject; ACommand: String);
var text:string; Items: TStringList; cmdcheck,position,iLine:integer; begin memo1.Lines.Add(Acommand); //Commands filtern/senden Items := TStringlist.Create; text := copy(memo1.Lines[memo1.Lines.Count-1],Length(edit3.Text)+3,Length(memo1.Lines[memo1.Lines.Count-1])-Length(edit3.Text)+3); //Gucken obs ein Command ist: cmdcheck := pos('#',text); if cmdcheck > 0 then begin //COMMANDS AUS TEXT FILTERN: position := pos(text,memo2.Text); if position > 0 then begin iLine := SendMessage(Memo2.Handle,EM_LINEFROMCHAR,position-1,0); //Command gefunden...Antwort senden: ExtractStrings(['|'], [], PChar(memo2.Lines[iLine]), Items); irc.Say(edit3.Text,Items.Strings[1]); //--> end;
Delphi-Quellcode:
reichen, oder täusch ich mich?
procedure TForm1.ircMessage(Sender: TObject; AUser: TIdIRCUser;
AChannel: TIdIRCChannel; Content: String); begin Memo1.Lines.Add('['+ AUser.Nick +'] '+ Content); end; Man müsste dann halt noch mit
Delphi-Quellcode:
die abfrage reinmachen (Er hats aus nem File, bzw. aus Memo2.Lines aber das dürfte ja auch kein problem sein das umzusetzen, wollts jetzt nur mal schreiben weil das meines wissens nach vollkommen reichen würde (ich habs nämlich immer so gemacht)
if Content='bla' then blabla;
wenns nich stimmt verbessert mich =) |
Re: Neunis IRC-Bot
Warum soll ich das denn einfach machen, wenns auch schwer geht?
|
Re: Neunis IRC-Bot
Zitat:
|
Re: Neunis IRC-Bot
Naja...hatte das wohl übersehen :oops:
|
Re: Neunis IRC-Bot
Ich bin gerade am Testen und mir ist schonmal ein Fehler aufgefallen!
Das Memo kriegt keinen Scrollbar! Ausserdem joint er nicht in den Channel! Aber an sich finde ich die Idee sehr gut! |
Re: Neunis IRC-Bot
Scrollbars:=ssVertical;
Und außerdem kann der garkeinen Channel joinen, der jetzt z.b. inner ini steht, weil:
Delphi-Quellcode:
Besser wäre da
try
irc.Connect; irc.Join('#engels-krieger'); except memo1.Lines.Add('Verbinden fehlgeschlagen. Bitte überpfüfen Sie die Einstellungen.') end;
Delphi-Quellcode:
Ja, das geht bestimmt auch anders (ini als gloabe variable und dann bei OnCreate ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+ 'einstellungen.ini'); das machen, war mir aber nich ganz sicher und da hab ich das eben so reingeschrieben :) Wollt ja auch nur zeigen, dass er den Channel nicht richtig aus der ini datei ausliest...
procedure TForm1.BitBtn1Click(Sender: TObject);
var ini: TIniFile; begin ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+'einstellungen.ini'); [...] try irc.Connect; irc.Join(ini.ReadString('einstellungen','channel','')); ini.free; except memo1.Lines.Add('Verbinden fehlgeschlagen. Bitte überpfüfen Sie die Einstellungen.') end; Ah mir viel grad ein, noch einfacher wäre:
Delphi-Quellcode:
Naja, die guten Ideen kommen immer zuletzt :P
irc.Join(Edit3.Text);
|
Re: Neunis IRC-Bot
So, hab nun die größten Fehler behoben. Source stelle ich gleich rein.
Nun wär da noch ne Sache: Wie kann ich das am einfachsten machen, dass man Plugins hinzufügen kann? Also dass man z.B. einfach durch ne DLL ein Wetter-Plugin baut, dass dann dafür sorgt, dass der Bot das wetter ausliest oder so. Einer ne Idee wie man solche Plugins am besten einbindet? |
Re: Neunis IRC-Bot
Zitat:
![]() |
Re: Neunis IRC-Bot
Hi.
Zitat:
Delphi-Quellcode:
die es in jeder PlugIn-DLL gibt.
function getPlugInText(params : array of PChar) : PChar;
Bei Angabe eines Befehls wird die entsprechende DLL geladen und die Funktion ausgeführt. |
Re: Neunis IRC-Bot
Warum gleich ne DLL? Man könnte auch direkt auf den Server zugreifen. Man müsste eben nur guckn, auf welche Seite ein mIRC-Script zugreift und das dann in Delphi umschreiben. Weiß nicht, wieso ihr da DLLs verwenden wollt, es sei denn, es gibt schon Fertig-DLLs.
|
Re: Neunis IRC-Bot
Hmm...also mit den DLLS, das ist ja schon n bissl kompliziert. Gehts nicht einfacher?
|
Re: Neunis IRC-Bot - Neue Version!
Liste der Anhänge anzeigen (Anzahl: 2)
So, ich hab nun die nächste, neue, Version fertig.
Das ist neu: - Diverse Fehler behoben - XP-Style - Code vereinfacht - Web-Plugins möglich!! Zu den Web-Plugins: Alle Commands in der commands.irc sind folgendermaßen aufgebaut: #befehl|Antwort|typ #befehl ist der Befehl, auf den reagiert wird. Antwort ist die Antwort, die gesendet wird. Typ: Ist als Typ "plugin" angegeben (ohne ""), dann wird die Adresse aufgerufen, die bei Antwort angegeben ist. Beispiel: #plugintest|http://kempie.de/irc.php|plugin Nun wird die Datei irc.php auf kempie.de aufgerufen. Das Kommando wird per $_GET an das PHP-Script übergeben. Im PHP-Script kann man das Command dann mit $_GET['command'] abrufen. Im Beispiel wäre das dann "plugintest". Ist was anderes als "plugin" angegeben (z.B. "0" oder "text"), dann wird die Antwort direkt gesendet. Ich habe fertig. |
Re: Neunis IRC-Bot - Neue Version!
tolles programm, nur welche komponenten braucht man alles um es kompilieren zu können? die indy-komponenten hab ich. ich hab delphi 7 personal. sry bin anfänger.
|
Re: Neunis IRC-Bot - Neue Version!
Yep, welche Kompos??
grüße ulli |
Re: Neunis IRC-Bot - Neue Version!
Also ich habe Delphi 7 Enterprise und dazu Indy10 Components, aber ich bekomme folgende Fehlermeldungen, bei denen sich nich sofort erschließt, was nicht richtig läuft:
"Field Form1.irc does not have any corresponding component. Remove the Declaration?" "Field Form1.IdHTTP1 does not have any corresponding component. Remove the Declaration?" Build [Error] Unit1.pas(41): Undeclared identifier: 'TIdIRCUser' [Error] Unit1.pas(42): Undeclared identifier: 'TIdIRCChannel' [Error] Unit1.pas(124): Undeclared identifier: 'Nick' [Error] Unit1.pas(125): Undeclared identifier: 'AltNick' [Error] Unit1.pas(167): ')' expected but identifier 'Nick' found [Error] Unit1.pas(167): 'END' expected but ')' found [Error] Unit1.pas(169): ';' expected but 'IF' found [Error] Unit1.pas(171): '.' expected but 'ELSE' found [Error] Unit1.pas(173): Undeclared identifier: 'cmdcheck' [Error] Unit1.pas(173): Undeclared identifier: 'content' [Warning] Unit1.pas(176): Comparing signed and unsigned types - widened both operands [Error] Unit1.pas(180): Undeclared identifier: 'position' [Error] Unit1.pas(180): Incompatible types [Error] Unit1.pas(180): '(' expected but ')' found [Error] Unit1.pas(182): Missing operator or semicolon [Warning] Unit1.pas(182): Comparing signed and unsigned types - widened both operands [Error] Unit1.pas(186): Undeclared identifier: 'iLine' [Error] Unit1.pas(186): Not enough actual parameters [Error] Unit1.pas(196): Missing operator or semicolon [Error] Unit1.pas(200): Undeclared identifier: 'ausgabe' [Error] Unit1.pas(200): Undeclared identifier: 'idhttp1' [Error] Unit1.pas(200): Missing operator or semicolon [Error] Unit1.pas(200): Incompatible types [Error] Unit1.pas(200): ')' expected but ',' found [Error] Unit1.pas(200): Incompatible types [Error] Unit1.pas(204): Undeclared identifier: 'irc' [Error] Unit1.pas(204): Missing operator or semicolon [Error] Unit1.pas(204): 'END' expected but ')' found [Warning] Unit1.pas(213): Text after final 'END.' - ignored by compiler [Error] Unit1.pas(43): Unsatisfied forward or external declaration: 'TForm1.ircUserMode' [Error] Unit1.pas(44): Unsatisfied forward or external declaration: 'TForm1.ircReceive' [Fatal Error] Project2.dpr(6): Could not compile used unit 'Unit1.pas' Ich denk ma, wenn die ersten beiden Fehler behoben sind könnte es sogar klappen und die restlichen Fehler kläören sich dann wie von selbst. Hat jemand ne Idee? Wär mir sehr lieb :) MfG Mandawar |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz