Socket

Bliss89 Messages postés 40 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 25 juillet 2007 - 14 juil. 2007 à 13:29
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 - 15 juil. 2007 à 21:12
comment fait-on pour avoir plusieur socket ?

alias Shanorck1 { dialog -m sockbot1 sockbot1 }
dialog sockbot1 {
  title "Configuration de Shanorck [v 2.1]"
  size -1 -1 128 145
  option dbu
  button "Annuler", 77, 70 128 37 12, cancel
  button "OK", 5, 19 128 37 12, ok
  edit %Shanorck.serv, 1, 45 19 75 10
  edit %Shanorck.port, 2, 45 34 75 10
  edit %Shanorck.nickbot, 3, 45 49 75 10
  edit %p, 4, 45 64 75 10
  edit %chan1, 7, 45 79 75 10
  edit %snpass, 8, 45 94 75 10
  text "  Shanorck SocketBOT par uaip", 80, 5 5 110 8, center
  text "Serveur", 10, 7 20 25 8
  text "Port", 11, 7 35 20 8
  text "Pseudo du bot", 12, 7 50 35 8
  text "Propriétaire", 13, 7 65 30 8
  text "Salon à joindre", 14, 7 80 37 8
  text "Mot de passe", 15, 7 95 35 8
  box "", 16, 4 13 120 19
  box "", 17, 4 28 120 19
  box "", 18, 4 43 120 19
  box "", 19, 4 58 120 19
  box "", 20, 4 73 120 19
  box "", 21, 4 88 120 19
  button "Tout effacer", 22, 8 109 37 10
  check "Se souvenir des données", 23, 52 111 70 7
  box "", 24, 4 103 120 19
}
on *:dialog:sockbot1:*:*:{
  if ($devent == init) {
    did -c $dname 23
    did -ra $dname 1 $iif(%Shanorck.serv,%Shanorck.serv,<votre_serveur>)
    did -ra $dname 2 $iif(%Shanorck.port,%Shanorck.port,6667)
    did -ra $dname 3 $iif(%Shanorck.nickbot,%Shanorck.nickbot,Shanorck)
    did -ra $dname 4 $iif(%p,%p,votre pseudo)
    did -ra $dname 7 $iif(%chan1,%chan1,#votre_salon)
    did -ra $dname 8 $iif(%snpass,%snpass,<votre_mot_de_passe>)
  }
  if ($devent == sclick) {    if ($did 5) && ($did(23).state 1) {
      set %Shanorck.serv $did(1)
      set %Shanorck.port $did(2)
      set %Shanorck.nickbot $did(3)
      set %p $did(4)
      set %chan1 $did(7)
      set %snpass $did(8)
      .timer 1 1 bot1
    }
    if ($did == 22) {
      did -r $dname 1 | did -r $dname 2 | did -r $dname 3 | did -r $dname 4 | did -r $dname 7 | did -r $dname 8
    }
  }
}
menu * {  $iif(%Shanorck_connect ok,Déconnecter Shanorck,Connecter Shanorck):$iif(%Shanorck_connect ok,sdeco,sco)
}
alias sco { Shanorck1 }
alias sdeco { unset %Shanorck_connect | sockclose Shanorck1 | echo �3;3Shanorck a été désactivé. }
alias -l bot1 {
  echo -a �3;7~~~~~
  echo -a �3;4,1 Shanork �3;6° [ROBOT MIRC EN SOCKET] °�3;4,1 Version 2.1
  echo -a �3;3 Shanork à bien été chargé dans votre script. Pour l'ouvrir, tapez /Shanorck1 ou ouvrir dans la barre de menus.
  echo -a �3;4 ° Pour tout commentaire : irc.chat-land.org:6667 ° /q uaip °
  echo -a �3;7~~~~~
  sockclose Shanorck1
  unset %Shanorck_connect ok
  if (!%Shanorck.serv) set %Shanorck.serv $$?="Entrez le serveur auquel vous desirez connecter le robot :"
  if (!%Shanorck.port) set %Shanorck.port $$?="Entrez le port du serveur auquel vous voulez vous connecter (6667 recommandé) :"
  if (!%Shanorck.nickbot) || (Shanorck !isin %Shanorck.nickbot) set %Shanorck.nickbot $$?="Entrez le pseudo desiré pour le robot (attention, il doit impérativement commencer par Shanorck) :"
  if (!%chan1) set %chan1 $$?="Entrez le salon que vous voulez autojoindre :"
  if (!%p) set %p $$?="Entrez votre pseudo :"
  sockopen Shanorck1 %Shanorck.serv %Shanorck.port
  echo -a �3;3Shanorck : Démarrage de la connection à %Shanorck.serv $+ .
  echo -a �3;3Shanorck : Connexion en cours... Veuillez patienter.
}
on *:sockopen:Shanorck1:{
  if ($sockerr) {
    echo -a Erreur, vous avez été deconecté(e).
    return
  }
  sockwrite -n $sockname NICK %Shanorck.nickbot
  sockwrite -n $sockname USER sdb sdb sdb : Shanorck-Socket 2.1
  set %Shanorck_connect ok
  set %Shanorck_blabla ok
  set %Shanorck_hl ok
  set %Shanorck_moi off
}
;#######################
on *:input:*:{
  if (!join == $strip($1)) { .notice %Shanorck.nickbot back $chan }  if ($chan %chan1) && (%Shanorck_moi ok) && (!pumoi != $strip($1)) { sockwrite -n Shanorck1 privmsg $active $1- | haltdef }
  if ($strip($1) == !part) { .notice %Shanorck.nickbot bye $chan }
  if ($strip($1) == !pumoi) { msg $chan Je reprends maintenant mon véritable pseudo. | set %Shanorck_moi off }
}
on *:text:*:#:{
  if ($chan == %chan1) && (($nick isop $chan) || ($nick ishop $chan) || ($nick isvoice $chan)) {
    if (!join == $strip($1)) { .notice %Shanorck.nickbot back $chan }
    if ($strip($1) == !part) { .notice %Shanorck.nickbot bye $chan }
  }
}
;#######################
on *:sockread:Shanorck1:{
  sockread %a
  tokenize 32 %a
  if ($gettok(%a,1,32) == PING) {
    sockwrite -n $sockname PONG $remove($gettok(%a,2,32),:)
  }
  if ($gettok(%a,4,32) == :Welcome) {
    echo -a �3;3Shanorck : Je suis maintenant connecté sur %Shanorck.serv $+ .
    .timer.reg1 1 1 sockwrite -n $sockname privmsg nickserv identify %snpass
    .timer.reg2 1 1 echo -a �3;3Shanorck : Je suis maintenant enregistré auprès de NickServ.
    .timer.join1 1 2 sockwrite -n $sockname JOIN %chan1
    .timer.join2 1 2 echo -a �3;3Shanorck : Je vais joindre le salon %chan1 $+ .
  }  if ($gettok(%a,2,32) KICK) && ($gettok(%a,3,32) %chan1) && ($gettok(%a,4,32) == %Shanorck.nickbot) {
    sockwrite -n $sockname JOIN %chan1
  }

11 réponses

cs_ISoKa Messages postés 435 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 17 octobre 2008
14 juil. 2007 à 14:44
Bin pour avoir plusieurs sockets en mm temps, soit tu fais bourin et tu repetes ton code autant de fois que tu veux de bots, soit tu fais un truc plus fin, c-a-d que tu adaptes ton script pour gerer plusieurs bot en interne. Par exemple  : ton premier bot s'appel apparement shanorck1 donc bin tu te dis que tes bot s'appels de facon générale shanorckX. Ainsi tes :
on *:sockread:Shanorck1:{
deviennes
on *:sockread:Shanorck*:{
ainsi en gros aprés ton :
on *:sockread:Shanorck1:{
  sockread %a
  tokenize 32 %a
  if ($gettok(%a,1,32) == PING) {
    sockwrite -n $sockname PONG $remove($gettok(%a,2,32),:)
  }
  if ($gettok(%a,4,32) == :Welcome) {
     echo -a �3;3Shanorck : Je suis maintenant connecté sur %Shanorck.serv $+ .
    .timer.reg1 1 1 sockwrite -n $sockname privmsg nickserv identify %snpass
    .timer.reg2 1 1 echo -a �3;3Shanorck : Je suis maintenant enregistré auprès de NickServ.
    .timer.join1 1 2 sockwrite -n $sockname JOIN %chan1
    .timer.join2 1 2 echo -a �3;3Shanorck : Je vais joindre le salon %chan1 $+ .
  }  if ($gettok(%a,2,32) KICK) && ($gettok(%a,3,32) %chan1) && ($gettok(%a,4,32) == %Shanorck.nickbot) {
    sockwrite -n $sockname JOIN %chan1
  }
pourrai devenir (je fai ca rapide je garantie pas la fonctoinalité) :
on *:sockread:Shanorck*:{
  sockread %a
  tokenize 32 %a
  if ($1 == PING) {
    sockwrite -n $sockname PONG $remove($2,:)
  }
  if ($4 == :Welcome) {
    echo -a �3;3 $sockname  : Je suis maintenant connecté sur % [ Shanorck.serv $+ [ $right($sockname,-8) ] ] $+ .
    .timer.reg1 $+ $right($sockname,-8)  1 1 sockwrite -n $sockname privmsg nickserv identify % [ snpass $+ [ $right($sockname,-8) ] ]
    .timer.reg2 $+ $right($sockname,-8) 1 1 echo -a �3;3 $sockname : Je suis maintenant enregistré auprès de NickServ.
    .timer.join1 $+ $right($sockname,-8) 1 2 sockwrite -n $sockname JOIN % [ chan1 $+ [ $right($sockname,-8) ] ]
    .timer.join2 $+ $right($sockname,-8) 1 2 echo -a �3;3 $sockname : Je vais joindre le salon % [ chan1 $+ [ $right($sockname,-8) ] ] $+ .
  }  if ($2 KICK) && ($3 % [ chan1 $+ [ $right($sockname,-8) ] ] ) && ($4 == % [ Shanorck.nickbot $+ [ $right($sockname,-8) ] ] ) {
    sockwrite -n $sockname JOIN % [ chan1 $+ [ $right($sockname,-8) ] ]
  }

Voila en gros à quoi ca ressemblerai aprés modif. Comme tu vois ca complique le code apparement mais bon en faite c'est juste que ca rajoute des ptis bouts de code surtt les variables par exemple %chan1 devient % [ chan1 $+ [ $right($sockname,-8) ] ]
ce $right($sockname,-8) represente juste le numero de ton bot en supposant que tu prennes comme convention que tes bots s'appel biensur shanorckX avec X etant un nombre quelquonque par exemple. Toutefois pour simplifié un peu la lecture et la manipulation j'te conseille de faire dés le debut du on sockread "var  %b  $right($sockname,-8) " comme ca t'as juste %chan1 devient % [ chan1 $+ [ %b ] ]
ce qui est moins lourd à lire.
Maintenant à toi de generer les sockets via ton dialog de facon intelligente.
ISoKa
0
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
14 juil. 2007 à 19:57
Mdr :  $right($sockname,-8) deviens $right($sockname,1), sinon, j'lui conseillerai plutot de pas faire des trucs trop durs pour lui, et que au lieu de bidouiller le code des autres en socket, il devrait plutot faire son propre socket tout seul :)
0
cs_ISoKa Messages postés 435 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 17 octobre 2008
15 juil. 2007 à 00:55
Mdr :  $right($sockname,-8) deviens $right($sockname,1) <<< Valable seulement si le numero est à 1 seul chiffre :), pour ma part j'avai traité le cas général avec une quantité pouvant etre superieure à 10

ISoKa
0
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
15 juil. 2007 à 01:15
Bah si tu veux joué au plus malin, tu n'avais pas géré le cas ou le nombre est superieur a 99 =), donc le mieux est $remove($sockname,Shanorck),
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
15 juil. 2007 à 02:35
"sinon, j'lui
conseillerai plutot de pas faire des trucs trop durs pour lui, et que
au lieu de bidouiller le code des autres en socket, il devrait plutot
faire son propre socket tout seul :)"

surtout que c'était mon 1er socket et que c'est codé comme une quiche
0
Bliss89 Messages postés 40 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 25 juillet 2007
15 juil. 2007 à 02:37
ben faire mon socket tous seul c'est meme pas la peine ou bien je le ferais tous seul :)...
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
15 juil. 2007 à 02:48
sinon pour repondre a ta question, le systeme de l'étoile est pas mal, mais j'avoue que je l'avais utilisé pour les events mp3end / waveend / midiend et ca marchait pas :D (mais je suis sous mirc v6.17, ptete que ca joue qqchose..)
enfin bon, ma reponse n'est pas complete, dsl :s
0
cs_ISoKa Messages postés 435 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 17 octobre 2008
15 juil. 2007 à 03:24
"Bah si tu veux joué au plus malin, tu n'avais pas géré le cas ou le
nombre est superieur a 99 =), donc le mieux est
$remove($sockname,Shanorck)"

:/ comme j'l'avai di avant, mon truc c'est le cas général donc ca gerai meme 9999999 toutefois il est vrai que $remove($sockname,Shanorck) etait plus elegant vu que mon $right($sockname,-8) revient à $remove($sockname,Shanorck) reli bien, tu verras que c'est le cas :)

ISoKa
0
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
15 juil. 2007 à 04:06
Isoka : Ouaip dsl, ton $right étais bon et mon $remove n'est pas plus élégant que ton $right (même si mon $remove marche pour nimporte quel nom de socket)

Uaip :
Les évènements on MIDIEND, on WAVEEND, et on MP3END  se déclenchent quand mIRC finit de jouer un son.
Format :    on <niveau>:MIDIEND:<commandes>
Il y a aussi :
On SONGEND
Agit sur la fin des fichiers type OGG, MP3 & WMA.
Qui marche de la même façon, mais on waveend ne marchait pas, c'etais un bug, corrigé sur la 6.21 mais, quel est le rapport avec les joker (*) et pourquoi ne prend tu pas la 6.21 ?
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
15 juil. 2007 à 11:16
bah le rapport c'était l'utilisation de l'étoile (*). enfait j'ai fait un lecteur mp3 et j'avais fait ca :
[et la je viens de me rendre compte de mon erreur stupide :) ]
bref, le probleme est réglé ^^
et si je prends pas la 6.21 bah... ptete parce-que sans doute la facon de programmer a évoluer et je suppose que maintenant 4 lignes de mes codes reviennent a un simple identifieur, je code a l'ancienne, et ca m'embeterai de devoir tout changer... sinon, ma v6.17 est en francais (peu utile pour moi vu que j'ai viré la barre des menu, la toolbar, etc) mais pratique pour les requetes input.
0
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
15 juil. 2007 à 21:12
Pas bien de modifier l'exe de mIRC ;) mais quand au rapport 6.17/6.21, mirc est en constante évolution mais c'est très très rare que d'une version a une autre maintenant, il y est des changement de comportement d'un code (le dernier truc en date c'est le window -h), donc ton code sur la 6.17 est censé marché sur la 6.21, il y a juste des restriction sur les façon de coder sur les parenthese des if, mais si tu code pas comme un bourin ça marchera très bien et le seul identifieur nouveau de la 6.21 est $portable.
0
Rejoignez-nous