n0man
Messages postés25Date d'inscriptionjeudi 23 février 2006StatutMembreDernière intervention30 octobre 2007
-
30 oct. 2007 à 10:21
cs_TropNul
Messages postés340Date d'inscriptiondimanche 18 septembre 2005StatutMembreDernière intervention22 octobre 2009
-
30 oct. 2007 à 16:03
Bonjour,
Actuelment je suis sur le projet d' un socket Bot, et je me demandais comment repondre au CTCP version car sur certain serveur ne pas repondre entraine une déconnection immédiate.
Ensuite je me demandais comment fonctionnais les requetes DCC CHAT pour que l' owner bu bot puisse communiquer avec le bot,
Je ne sais pas quoi faire pour confirmer un dcc chat.soit si demandé soit si envoyé.
cs_TropNul
Messages postés340Date d'inscriptiondimanche 18 septembre 2005StatutMembreDernière intervention22 octobre 2009 30 oct. 2007 à 15:30
Tout d'abord, une petite explication sur le format des CTCPs. Ce sont des message (PRIVMSG) delimites par le caractere $chr(1).
En envoyant ceci: ' $chr(1) $+ Salut $+ $chr(1) ' avec la commande < /Raw PRIVMSG UnPseudo : $+ $chr(1) $+ Salut tout le monde $+ $chr(1) >, j'aurais fais ? :p Je t'invite a tester pour savoir ce que cela fera.
Voici un example de gestion des CTCPs en socket. Dans l'exemple, tu vas voir que la gestion ne fait qu'afficher les CTCPs recus dans la socket. Pour savoir quoi repondre, utilises la commande < /debug -t @raws >. Cela va te permettre de voir ce qui se passe en 'brut' sur le serveur. Fais des tests sur toi-meme et regardes ce que renvoit le 'debug' dans la fenetre @raws. Tu sauras ce que repond mirc. Il ne te restera plus qu'a faire de meme dans ta socket avec la commande < /sockwrite >.
On *:SockRead:Nom:{
If ($sockerr > 0) Return
Var %z
SockRead %z
If ($sockbr == 0) Return
Tokenize 32 %z
If ($mid($gettok(%ansp.RcptHorus, 4, 32), 2, 1) == $chr(1)) {
If ($remove($mid($4, 3, 15),$chr(1)) == VERSION) {
Echo -est CTCP VERSION sur Socket: De $remove($gettok(%z, 1, 33),:) > $4-
Return
}
ElseIf ($remove($mid($4, 3, 25),$chr(1)) == PING) {
Echo -est CTCP PING sur Socket: De $remove($gettok(%z, 1, 33),:) > $4-
Return
}
ElseIf ($remove($mid($4, 3, 15),$chr(1)) == TIME) {
Echo -est CTCP TIME sur Socket: De $remove($gettok(%z, 1, 33),:) > $4-
Return
}
ElseIf ($remove($mid($4, 3, 15),$chr(1)) == FINGER) {
Echo -est CTCP FINGER sur Socket: De $remove($gettok(%z, 1, 33),:) > $4-
Return
}
ElseIf ($remove($mid($4, 3, 15),$chr(1)) == ACTION) {
Echo -est QUERY ACTION sur Socket: De $remove($gettok(%z, 1, 33),:) > $4-
Return
}
}
}
}
}
Pour les DCC CHAT, ce sont aussi des messages CTCPs, mais qui sont geres differemment. Il y a tout un system de socket qui se met en route lors de l'initialisation d'un DCC CHAT. Je ne vais pas rentrer dans les details et il existe beaucoup de documentation sur le net qui en parle.
Pour confirmer directement un DCC CHAT, tu peux utiliser le code suivant:
CTCP *:*:*:{ If ($1-2 DCC CHAT) && ($nick PseudoDemandantLeDCCCHAT) { DCC CHAT $nick } }
Donc, comme tu le vois, c'est gere dans l'event 'CTCP' ;).