[Irc|RFC 1459] In Javascript
Hey;)
Da ich demnächst ein Irc Bot programmieren werde habe ich mir in Javascript mal die entsprechenden Funktionen gescriptet.
Nun dachte ich mir natürlich das ich euch das nicht vorenthalten darf,
gibt schließlich genug Leute die ein Irc-Client Coden wollen und mit dem Protokoll nicht klar kommen. So können sich diese Leute mal anschauen
wie man die jeweiligen Funktionen umsetzen kann.
Code:
/*
Internet Relay Chat Protocol Funktionen in Javascript [Cyb0t v0.1]
Copyright by Cyc0de 2012(c)
Beschreibung:
Funktionen des Irc-Protokolls zum Verbinden, Chatten etc.
Zum Nachbauen in einer anderen Sprache mit Sockets (Es sind keine Sockets dabei,
lediglich die Funktionen die gegebenfalls umgeschrieben werden müssen,
jenachdem Welche Script/Programmiersprache ihr benutzt!
Funktionen:
- Login
- Ping & Pong Abfrage beantworten (Antwort in Cl_Msg)
- Privatnachricht senden
- Nachricht senden
- Channel Joinen
- Channel Verlassen
- Disconnect
*/
//Vordefinierte Variablen
//srv_msg = Server Antwort (Auslesen per Socket und entsprechend übergeben)
//cl_msg = Client Antwort (Hier werden die Nachrichten zum senden gespeichert, jeweils per Socket absenden!)
var logy = new Array("Cyb0t","0","irc.euirc.net","v0.1","#chan"); //Nickname, Client-Host, Server-Host, Whois-Name (Versionsnummer des Bots), Channel
var srv_msg ="";
var cl_msg = "";
//Login-Funktion
//Login()[0] = buffer[0]
//Login()[1] = buffer[1]
function login(){
var buffer = new Array();
buffer[0] = "USER "+logy[0]+" "+logy[1]+" "+logy[2]+" "+logy[3];
buffer[1] = "NICK"+logy[0];
return buffer;
}
//Ping & Pong
function pong(servermessage){
if(servermessage.indexOf("PING :")!=-1){
cl_msg = servermessage.replace("PING","PONG");
return cl_msg;
}
}
//Privatnachricht
function privmsg(user,msg){
cl_msg = "PRIVMSG "+user+" :"+msg;
return cl_msg;
}
//Nachricht in den Channel senden
function chanmsg(msg){
cl_msg = "PRIVMSG "+logy[4]+" :"+msg;
return cl_msg;
}
//Channel Joinen
function join(){
cl_msg = "JOIN "+logy[4];
return cl_msg;
}
//Channel Verlassen
function leave(chan){
cl_msg = "PART "+chan;
return cl_msg;
}
//Disconnecten
function quit(quitmsg){
cl_msg = "QUIT :"+quitmsg;
return cl_msg;
}
Verbesserungsvorschläge sind gern gesehen ;)
Und ja, ich bin Cyc0de... ist mein neuer Nickname -> nicht dass jemand anfängt zu flamen das wäre nicht mein sourcecode:twisted
lg Cy
AW: [Irc|RFC 1459] In Javascript
Wow wirklich sehr gute Arbeit. Gibt es den auch komplett fertig?
AW: [Irc|RFC 1459] In Javascript
Bisschen viel Copyright für soviel redundanten Code. Muss cby aber widersprechen. Der Hauptteil der Arbeit ist damit ja wirklich schon erledigt. Es fehlt ja nur noch die Verbindung zum Server, das eigentliche Senden der Befehle, das Analysieren der empfangenen Nachrichten (für PING/PONG hat er das ja schon erledigt, was ja die größte Arbeit daran ist) und das erstellen der gesamten Programmlogik. Die Funktionen die mir zu leave("substanzloser Post") den String "PART :substanzloser Post" zurück liefert erleichtert mir die Arbeit dabei wirklich.
Etwas seriöserer Teil des Posts:
PART nimmt keine "lmsg" als Parameter, sondern eher eine Liste von Channels. Das ":" was du noch da einbaust ist von dem von dir als Quelle angegebenem RFC nicht vorgesehen.
P.S.: http://free-hack.com/showpost.php?p=583883&postcount=17 ... verdammt die Leute hier kennen mich gut. Hätte nicht gedacht, dass mich so viele so gut einschätzen können :S
AW: [Irc|RFC 1459] In Javascript
Und genau die Verbindung zum Server scheint mir sehr wichtig zu sein.
Aber eigentlich war das Ganze eher ironisch gedacht.
Re: [Irc|RFC 1459] In Javascript
Code:
function pong(servermessage){ if(servermessage.indexOf("PING :")==-1){ }else{ cl_msg = servermessage.replace("PING","PONG"); return cl_msg; } }
Seriously.
W. T. F.
Kannst du mir das Konstrukt mal erklären?
AW: [Irc|RFC 1459] In Javascript
Es kommt ein PING und das musst du mit einem PONG wieder zurück geben.
IN: PING :283423
OUT: PONG :283423
Somit bleibt die Verbindung zum Server erhalten. Würdest du kein PONG senden, hättest du je nach Einstellungen ein PING TIMEOUT.
Aber ich denke du willst auf das if {} elese { } anspielen. Das habe ich mich auch schon gefragt.
Re: AW: [Irc|RFC 1459] In Javascript
Zitat:
Zitat von
cby
Es kommt ein PING und das musst du mit einem PONG wieder zurück geben.
IN: PING :283423
OUT: PONG :283423
Somit bleibt die Verbindung zum Server erhalten. Würdest du kein PONG senden, hättest du je nach Einstellungen ein PING TIMEOUT.
Aber ich denke du willst auf das if {} elese { } anspielen. Das habe ich mich auch schon gefragt.
Ich kenne das IRC Protokoll, danke.
Vielleicht habe ich mich falsch ausgedrückt: Unabhängig von der Funktion -- wie, in aller Welt, ist eine solche Struktur zu rechtfertigen?
AW: [Irc|RFC 1459] In Javascript
Aber ich denke du willst auf das if {} elese { } anspielen. Das habe ich mich auch schon gefragt.
Villeicht hast du das ja übersehen.
Zu deiner Frage: Ãœberhaupt nicht!
AW: [Irc|RFC 1459] In Javascript
Ehm.. Was gibts an der If-Abfrage den zu meckern? indexOf(); Prüft ob es ein Ping-Packet ist das der Server als antwort sendet, ist dies nicht der Fall wird dort -1 zurückgeliefert. Passt also finde ich schon sehr das dann jeweils so zu machen..
@cby nein noch nicht, da ich wie ich im erst-post schrieb erst demnächst dran basteln werde und es dann auch ein bot und kein client sein wird.
@blackberry
Zitat:
PART nimmt keine "lmsg" als Parameter, sondern eher eine Liste von Channels. Das ":" was du noch da einbaust ist von dem von dir als Quelle angegebenem RFC nicht vorgesehen."
Okay, wusste ich nicht. In dem Info-Paper was ich benutzt hatte stand dies so drin, werde es ausbessern Danke!
@Alle anderen
Der Code soll ja auch nicht zum Copy&Paste dasein... Ich hab das Gepostet damit die Leute sehen "wie man sowas machen könnte" und es nicht so schwer haben das umzusetzen, nicht das sie es einfach kopieren ;)
mfg
AW: [Irc|RFC 1459] In Javascript
Wir meinen halt das leere if-statement.