2 questions !

Résolu
cs_mikrobe Messages postés 15 Date d'inscription vendredi 20 juin 2003 Statut Membre Dernière intervention 4 janvier 2006 - 11 nov. 2005 à 08:57
RCA ArKanis Messages postés 1287 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 21 février 2009 - 9 déc. 2005 à 20:11
1ere question: J'aimerais savoir s'il y a un moyen, pour que lorsqu'il y a un changement de date ( à minuit tout les jours ) mon mirc m'écrive dans un fichier la date d'hier avec ces paramètres:
TimeSpanMode = FixedSpan
TimeSpanStart = date d'hier
TimeSpanEnd = date d'hier

2ieme question: Je me suis crée un code hyper simple qui fait que lorsque quelqu'un arrive ou part ou quite ou change son nick sur un canal, mon mirc inscrit le tout dans un fichier txt que j'inclus ds un site web (je suis mon propre hébergeur) ce qui permet via le site web de savoir qui est présentement sur le canal. Voici ce que mon code a l'air:

ON *:JOIN:#: {
if ($nick == $me) { write -c f:\web\ $+ $chan $+ .txt $nick
else { write f:\web\ $+ $chan $+ .txt $nick }
}
ON *:PART:#: { write -ds $nick d:\web\ $+ $chan $+ .txt
ON *:KICK:#: { write -ds $knick d:\web\ $+ $chan $+ .txt }
ON *:NICK: {
if ($nick == $read(f:\web\#montreal.txt,w, $nick )) {
write f:\web\#montreal.txt $newnick
write -ds $nick d:\web\#montreal.txt }
if ($nick == $read(f:\web\#quebec.txt,-w, $nick )) {
write f:\web\#quebec.txt $newnick
write -ds $nick d:\web\#quebec.txt }
; et ainsi de suite pour tout les chans que je suis... }


ON *:QUIT: {
write -ds $nick f:\web\#montreal.txt
write -ds $nick f:\web\#quebec.txt
; ainsi de suite aussi pour tout les chans que je suis dessu...
}

Tout fonctionne très bien sauf que jai comme petit problème que pour le ON *:JOIN:#: { if ($nick == $me) { write -c f:\web\ $+ $chan $+ .txt $nick } il crer un nouveau fichier et inscrit mon nick et ensuite ajoute tout les autre nick qui joigne le canal.. jaimerais si posible pouvoir faire un genre de /names pour qu'a chaque fois je join le canal, tout les nicks déjà présent (en plus du mien) s'inscrivent dans le fichier txt .. j'ai essayé quelques trucs mais sans success..

Et pour ce qui est du ON nick et le On Quit, ya pas moyen de spécifier de #chan donc je ne peux pas utiliser la commande $chan pour spécifier dans quel fichier txt faire les modification alors si je l'utilise tout est bousillé. Je dois donc indiquer manuellement ds quel fichier faire les modifications, et lui dire de vérifier avant si le nick existe car sinon, dans les changement de nick, il indiques dans tout les fichier txt le nouveau nick meme s'il n'est pas sur le canal. Cela est parfois fastidieux quand je dois ajouter ou surprimer des canaux (c'est un bot de stats (mircstats.com), donc je suis souvent appeler a etre sur des nouveau chan et en enlever d'autre)
Quelqu'un a une idée de comment je pourais faire pour rendre ca plus simple, ça serait tellement sympa ? Je ne connais rien en script mirc donc c'est pas mal le mieux que j'ai pu faire pour le moment. Merci de votre aide

17 réponses

RCA ArKanis Messages postés 1287 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 21 février 2009
11 nov. 2005 à 11:26
1ere question
tu peux utiliser $date($calc($ctime - 86400)
ça te donnera la date de 24h avant
avec un timerminuit -o 0:00 1 1 "alias"

2e question
pour ton /names, utilise un raw (353 sur quakenet)
=> raw 353:*:{
"actions"
}
pour ton premier teste, je te conseille de mettre echo -a $1-

3e question
pour le on quit, utilise $comchan, et fais une boucle dessus
on *:quit:{ var %t 1, %max $comchan(0)
while %t <= %max {
write -ds $+("folder"\,$comchan(%t),.txt) $nick
inc %t
}
}

et puis pour envoyer sur ton site, essaye de construire un .txt entier, et regarde sur ce site la source ftp_send
n'essaye pas de faire un envoi à chaque join, sinon tu vas rencontrer pas mal de problèmes (imagine le retour de net split ...)
essaye plutôt d'envoyer du genre toutes les 30secs
pour ça, tu n'as pas besoin de tous ces ON QUIT et les autres, une simple boucle suffit :p
alias make.txt { var %t 1, %max $nick("tonchan",0)
while %t <= %max {
write $+("folder","tonchan",.txt) $nick("tonchan",%t)
inc %t
}
}
et ce code résout plus ou moins ton problème de nicks par ordre alphabétique, il y aura juste l'ordre des @ + Ø :p
3
RCA ArKanis Messages postés 1287 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 21 février 2009
9 déc. 2005 à 20:11
passe par un alias qui 1 minute (ou plus) plus tard relancera ce timer =>
timerminuit -o 0:00 1 1 minuit.do

alias minuit.do {
tes actions
.timerrelancer.minuit 1 120 .timerminuit -o 0:00 1 1 minuit.do
}
3
cs_mikrobe Messages postés 15 Date d'inscription vendredi 20 juin 2003 Statut Membre Dernière intervention 4 janvier 2006
11 nov. 2005 à 09:51
Ya aussi un moyen pour que les nick dans le fichier txt soit en ordre alpha plutot que dans l'ordre qu'ils arrivent sur le canal ? Merci :)
0
COOLMAN002 Messages postés 969 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 1 juillet 2012 1
11 nov. 2005 à 11:56
Ton on joir, il te fait aps un truc "bizare" dans tes remote ? genre:





ON *:JOIN:#: {


if ($nick == $me) { write -c f:\web\ $+ $chan $+ .txt $nick


else { write f:\web\ $+ $chan $+ .txt $nick }


}





ON *:PART:#: { write -ds $nick d:\web\ $+ $chan $+ .txt


ON *:KICK:#: { write -ds $knick d:\web\ $+ $chan $+ .txt }








ect.


C'est simplement parce qu'il te manque des "}" (clique sur le bouton
"{}" à droite de "goto line" dans Remote et ça te dira où il manque des
"}").





Sinon pour le on quit, le $comchan ok, mais c'est sur $comchan($nick,0) qui faut faire la while :)
0

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

Posez votre question
RCA ArKanis Messages postés 1287 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 21 février 2009
11 nov. 2005 à 12:00
euh oui bien sûr, j'ai pas fait gaffe :p
on *:quit:{ var %t 1, %max $comchan($nick,0)
while %t <= %max {
write -ds $+("folder"\,$comchan($nick,%t),.txt) $nick
inc %t
}
}
0
cs_mikrobe Messages postés 15 Date d'inscription vendredi 20 juin 2003 Statut Membre Dernière intervention 4 janvier 2006
12 nov. 2005 à 01:08
Merci de votre aide, je vais voir ce que je peux faire, malgré votre grand aide, étant moi même un nul *lol* j'suis pas certain que ça va marcher hihihi

Pour ce qui est du ftp_send je n'en ai pas besoin puisque je suis mon propre hébergeur pour mon site web, donc j'ai seulement besoin d'écrire directement dans le fichier sans avoir a l'uploader :)
0
cs_mikrobe Messages postés 15 Date d'inscription vendredi 20 juin 2003 Statut Membre Dernière intervention 4 janvier 2006
12 nov. 2005 à 06:29
Bon jai réussi à tout faire ou presque..
J'suis parvenu à faire ce que vous m'aviez dit sauf pour le raw, je n'ai aucune idée de ou le place, ou comment faire pour que quand j'arrive sur un canal, ça inscrive les nicks présent dans un fichier texte !

Qqn pour m'expliquer exactement ce que je dois faire ? Merci :)
0
RCA ArKanis Messages postés 1287 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 21 février 2009
12 nov. 2005 à 09:23
tu le places au même niveau qu'un ON "event"
mets le echo, tu verras bien ce que tu devras faire :p
0
cs_mikrobe Messages postés 15 Date d'inscription vendredi 20 juin 2003 Statut Membre Dernière intervention 4 janvier 2006
13 nov. 2005 à 11:55
Merci tout le monde de votre aide, cela fut vraiment utile ! Toute fois, me voilà encore avec un problème ! J'ai fini par faire mon raw et tout et tout et mon code donne ceci:
raw 353:*:{
write f:\web\ $+ $3 $+ .txt $remove($remove($4-,+),@)
}
ON *:JOIN:#: { write f:\web\ $+ $chan $+ .txt $nick }

Ce qui donne que lorsque je join un canal, mon mirc inscrit les nicks présent dans le fichier texte du meme nom que le canal (en enlevant les @ et les +) de facon suivante.. nick1 nick2 nick3 nick4...
Quand quelqu'un joint le canal par la suite.. le code les inscrits comme ca..
nick5
nick6
nick7
Le probleme est que lorsque quelqu'un quite le canal par example, le code
ON *:PART:#: { write -ds $nick f:\web\ $+ $chan $+ .txt } va trouver et enlever les nicks s'il sont écrit de la maniere des nick 5,6 et 7, mais ne les voit pas s'ils sont dans la liste des nicks 1,2,3 ou 4

Je cherche donc à savoir s'il y a moyen de soit #1 avec le raw, écrire les nicks à un par ligne au lieu de tous à la suite de l'autre.. ou #2 s'il y a un moyen de scripter pour dire d'aller chercher le nick ( écrit comme les nick 1 2 3 4) et de l'enlever.

Merci encore de votre aide :)
0
RCA ArKanis Messages postés 1287 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 21 février 2009
13 nov. 2005 à 12:12
fais une boucle sur la raw :var %t 4, %max $0
while %t <= %max {
write f:\.. $gettok($1-,%t,32)
inc %t
}
ça t'écrira ligne par ligne

et sinon oublie pas de faire un /write -c ON JOIN, non ?
0
COOLMAN002 Messages postés 969 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 1 juillet 2012 1
13 nov. 2005 à 12:38
euh, plus rapide que la while, "$*" :)



raw 353:*: tokenize 32 $right($6-,-1) | write f:\... $*



et hop, le tour est joué :)



(Plus d'info sur l'indentifieur $* sur sbd.org
0
cs_mikrobe Messages postés 15 Date d'inscription vendredi 20 juin 2003 Statut Membre Dernière intervention 4 janvier 2006
13 nov. 2005 à 12:43
hmm ça fonctionne mais je ne suis plus capable d'utiliser mon $remove, il me copie les nick comme en double :\

pour le write -c, je le fait sur le on part quand c'est moi qui quite, et sur le on disconnect :)
0
RCA ArKanis Messages postés 1287 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 21 février 2009
13 nov. 2005 à 12:59
tokenize 32 $remove($right($6-,1),+,@)
tu n'as pas besoin de deux removes, qd tu mets des virgules ça considère un autre caractère à enlever

je connaissais pas coolman :p sympa :)
0
cs_mikrobe Messages postés 15 Date d'inscription vendredi 20 juin 2003 Statut Membre Dernière intervention 4 janvier 2006
13 nov. 2005 à 13:20
En fait, c'est ta facon a toi (Arkanis) qui fonctionnait, celle de coolman002 ne fonctionne pas ou me crer des bugs ! Sauf qu'avec la tienne, comme je disait, je ne parvient pas a enlever les @... ARGH !! Je hais le scripting lol
0
cs_mikrobe Messages postés 15 Date d'inscription vendredi 20 juin 2003 Statut Membre Dernière intervention 4 janvier 2006
13 nov. 2005 à 13:22
Ah yé jai réussit ! merci 1000 fois tlm :)
0
RCA ArKanis Messages postés 1287 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 21 février 2009
13 nov. 2005 à 13:33
j'ai testé la démo du $* (j'ai rallongé la phrase pour mieux voir la différence)
=>
Résultat: avec un while 156 ms et avec $* 187 ms.
Résultat: avec un while 172 ms et avec $* 171 ms.
Résultat: avec un while 187 ms et avec $* 172 ms.
Résultat: avec un while 187 ms et avec $* 188 ms.

en gros, y'a pas tant de différence :)

j'avais mis var %x $numtok(%t,59), %i 1, %ticks = $ticks
au lieu de $ticks en 1ere position, pour bien commencer les ticks (on sait jamais si /var prend bcp de temps)

et puis bon, j'pense que le code de coolman est bon, je pense que ton erreur est au niveau du write : il ne s'agit plus de prendre $3, car le tokenize l'a déplacé.
Sauvegarde le chan avant de faire le tokenize
0
cs_mikrobe Messages postés 15 Date d'inscription vendredi 20 juin 2003 Statut Membre Dernière intervention 4 janvier 2006
8 déc. 2005 à 09:30
Finalement, semble t'il que j'ai encore quelques petits bugs, et je suis convaincu qu'il sagit d'un truc tout simple mais que je ne cesse de me cassé la tête.

Il sagit du timerminuit -o 0:00 1 1 "alias"... ça fonctionne, mais seulement qu'une fois.
Le lendemain à minuit, ca ne fonctionne plus.

J'ai donc essayé avec un timerminuit -o 0:00 0 1 "alias" mais là c'est pas mieux il répette la meme commande à chaque seconde. J'ai essayer d'augmenter le nombre de seconde, mais il attend le délais avant de faire la commande, donc si je met un délait de 3600 seconde (1h) il ne fait la commande qu'a 1h00 alors que j'en ai besoin à 00h exacte.

Ce que j'ai vraiment besoin, c'est un truc qui pourait faire qu'à chaque jour, sans que j'ai à refaire le timer a toute les fois, à 00h exactement, la commande s'exécute immédiatement 1 fois, et recommence à 00h le lendemain.

Des idées quelqu'un ? :)
0
Rejoignez-nous