PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Irc|RFC 1459] In Javascript



Surflam
15.02.2012, 19:05
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.


/*
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

cby
16.02.2012, 08:47
Wow wirklich sehr gute Arbeit. Gibt es den auch komplett fertig?

blackberry
16.02.2012, 11:38
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

cby
16.02.2012, 11:44
Und genau die Verbindung zum Server scheint mir sehr wichtig zu sein.
Aber eigentlich war das Ganze eher ironisch gedacht.

fvuj
16.02.2012, 13:19
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?

cby
16.02.2012, 13:24
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.

fvuj
16.02.2012, 13:28
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?

cby
16.02.2012, 13:31
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!

Surflam
16.02.2012, 15:16
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

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

cby
16.02.2012, 15:30
Wir meinen halt das leere if-statement.

Surflam
16.02.2012, 15:35
mit was hätte ich es den füllen sollen? Klar sieht doof aus aber funktioniert nunmal^^
hatte da anfangs ein errorcode drin, wo dann auch speziell nen errorcode gesetzt wird der vom bot später benutzt wird..aber hab das rausgenommen damits übersichtlicher ist. Wirkte sonst auseinandergerissen, kanns aber gerne wieder einfügen wenns von nöten ist - wobei man sich das ja selbst denken kann und einfügen,is ja nicht viel Arbeit..


var errors = 1;
if(errors==1){
alert("Fehlercode 1");
}else{
alert("Alles gut!");
}


Wobei das ziemlich sinnfrei ist bei der PingPong Abfrage, weil sonst bei jedem Packet das kein PingPong ist ein Errorcode oder ne Fehlermeldung ausgegeben werden würde, was einfach Schwachsinn wäre. Falls jemand eine "schöne" Idee hat, immer raus damit ;)!

lg

k0rxxx
16.02.2012, 15:55
dann lass es weg und formuliere die bedingung um

fvuj
16.02.2012, 16:24
Schonmal was vom NOT-Operator gehört?

http://www.w3schools.com/js/js_comparisons.asp



function pong(servermessage) {
if(servermessage.indexOf("PING :")!=-1)
cl_msg = servermessage.replace("PING","PONG");
return cl_ms;
}
}Sollte doch so funktionieren?

Surflam
16.02.2012, 16:26
Tschuldige daran hab ich garnicht gedacht.. Habs gefixt.

fvuj
16.02.2012, 16:29
Tschuldige daran hab ich garnicht gedacht.. Habs gefixt.

Keine Ursache.
Wir fallen ja nicht als "Könner" vom Himmel.

Surflam
16.02.2012, 16:33
Hatte in Php z.b sonst immer damit gearbeitet, ich hätte daran denken können... war ein Fehler von mir ;) Dennoch hat der davorige Code funktioniert..hat funktioniert ^_^
Und einen "fix und fertig" Sourcecode wo Sockets etc. schon drin sind werde ich nicht Posten, schließlich soll man auch was lernen und nicht nur c&p´n...das hilft keinem. Derjenige der ein Bot/Client coden will wird das auch schaffen mit etwas Zeit & Geduld.

lg

lrg0
16.02.2012, 16:35
Warum hast du dich bei der Sprache für Javascript entschieden und nicht Python oder eine andere Sprache?

Surflam
16.02.2012, 16:40
Weil ich Javascript zur Zeit am besten beherrsche und sie Ähnlichkeiten zu Java hat, so das mir die Umsetzung des Codes für den Bot einfacher fällt, das in Javascript war sozusagen "Die Grundskizze" davon wie ich es machen möchte,und jetzt werd ichs dann in Java umsetzen.

k0rxxx
16.02.2012, 16:48
"if it compiles, it works" ^^

Surflam
16.02.2012, 16:55
genau so *g* - hab aber alle Funktionen einzelnd geprüft keine Sorge, funktionieren alle wie sie sollen ;)
Finde das völlig okay wenn man etwas für sich selbst Codet
Aber natürlich ist es auch nützlich dazuzulernen dabei durch Feedback so das man sein Style verbessern kann^^