Mise en forme de code: pensez à utiliser les balises [ tcl ] et [ /tcl ] (sans les espaces bien sûr) autour de vos codes tcl afin d'avoir un meilleur rendu et une coloration syntaxique. x


Une fonction qui retourne true si le pseudo est identifié (+r)
#16
@mcdeffice : STOP, et essaye de me lire.

Je reprends très doucement, essaye de lire tous les mots:
1. mes tests marchent très bien, que ce soit getaccount ou isidentified
2. pourtant le .status ne "semble" pas montrer que les CAP sont disponibles
3. donc ton moyen de vérifier que les CAP sont activées n'est pas le bon

Ensuite, je vais essayer la suite plus doucement encore:
1. Tu ne t'enregistres jamais auprès du serveur ircd, tu t'enregistres auprès des services
2. les CAP permettent de faire une liaison plus simple ircd/services
3. c'est bien NickServ (ou Q, ou machin, mais un service) qui renvoie l'info de l'identification ou du compte sous lequel tu es connu, ircd n'en est qu'un dépositaire temporaire
4. coupe tes services et tu verras que les CAP marcheront bien moins bien
5. et c'est pas le sujet

pour résumer
- ircd v3 (+ services) + eggdrop1.9 => accès à getaccount et isidentified
- c'est pas le .status qui permet de savoir exactement ce qui est disponible comme CAP.

Et dernier point, sur ton script pour mecmec: donc, s'il est sur un serveur pas à jour ou qu'il ne veut pas utiliser une version d'eggdrop unstable, pas de script ? Et pire: pas d'eggdrop parce que tu fais un die ? Et note que ça fera une erreur car cap ne sera pas une commande reconnue
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
  Reply
#17
(23/01/2021, 01:09)CrazyCat Wrote: @mcdeffice : STOP, et essaye de me lire.

Je reprends très doucement, essaye de lire tous les mots:
1. mes tests marchent très bien, que ce soit getaccount ou isidentified
2. pourtant le .status ne "semble" pas montrer que les CAP sont disponibles
3. donc ton moyen de vérifier que les CAP sont activées n'est pas le bon

Ensuite, je vais essayer la suite plus doucement encore:
1. Tu ne t'enregistres jamais auprès du serveur ircd, tu t'enregistres auprès des services
2. les CAP permettent de faire une liaison plus simple ircd/services
3. c'est bien NickServ (ou Q, ou machin, mais un service) qui renvoie l'info de l'identification ou du compte sous lequel tu es connu, ircd n'en est qu'un dépositaire temporaire
4. coupe tes services et tu verras que les CAP marcheront bien moins bien
5. et c'est pas le sujet

pour résumer
- ircd v3 (+ services) + eggdrop1.9 => accès à getaccount et isidentified
- c'est pas le .status qui permet de savoir exactement ce qui est disponible comme CAP.

Et dernier point, sur ton script pour mecmec: donc, s'il est sur un serveur pas à jour ou qu'il ne veut pas utiliser une version d'eggdrop unstable, pas de script ? Et pire: pas d'eggdrop parce que tu fais un die ? Et note que ça fera une erreur car cap ne sera pas une commande reconnue

Oui, bien résumé.
Effectivement, pour le .status c'est pourquoi j'ai été chercher un autre moyen de savoir via la commande [cap ].
Effectivement aussi il faudrait un catch sur le
tcl
[cap ... ]


ou plutot un
tcl
[info commands cap]


afin vérifier son existence.
on peu aussi ajouter un
tcl
package require eggdrop 1.9.0



Le die est volontaire même si brutal, sont eggdrop démarrera pas avec le script, vu que le script marchera pas sans ca .

Il n'y a pas que les services qui permet d'identifier un utilisateur, la méthode authentification SASL permet de s'identifier même si les services sont absent: le usermode est bien coté IRCD.
Je t'invite à voir la documentation usermode unrealircd : https://www.unrealircd.org/docs/User_Modes +r +R

4. coupe tes services et tu verras que les CAP marcheront bien moins bien <= je ne peu pas te laisser dire ceci car pas totalement juste non plus, le CAP est coté IRCD aussi. bien que en général ce sont les services si set le usermode +r (ou +g) . par exemple un eggdrop qui utilise le 'SVSMODE <nickname> <usermode>' ou autre .. "et c'est pas le sujet" car on part du principe que l'user doit être identifier a IRC

Quote:c'est bien NickServ (ou Q, ou machin, mais un service) qui renvoie l'info de l'identification, ircd n'en est qu'un dépositaire temporaire

Voici , en prenant en considération tes remarque une mise à jour du code.
tcl
if {[catch {package require eggdrop 1.9.0}]} {
	putloglev o * "\00304\[tapavu- erreur\]\003 tapavu nécessite que eggdrop 1.9.0 (ou plus) soit installé pour fonctionner. Votre version actuelle de Tcl est\00304 [package require eggdrop]\003." ; return
}
if { [catch { set CAP_LIST [cap ls] }] } {
	putloglev o * "\00304\[tapavu- erreur\]\003 tapavu nécessite que le serveur irc supportent les Capabilities pour fonctionner... ce script ne marchera pas avec la fonction \[isidentified \$nick\] " ; return
} else {
	putloglev o * "\00304\[tapavu- info\]\003 le serveur irc supportent les Capabilities suivants: ${CAP_LIST}." ;
}
 
bind pub -|- $tapavu(command)tapavu tapavu:pub:req
proc tapavu:pub:req {nick uhost hand channel arg} {
	if { ![isidentified $nick] } {
		puthelp "NOTICE $nick :04$nick12, je n'accepte les demandes des utilisateurs non-enregistrés."
		return 1
	}
	if {$arg == ""} {
		puthelp "PRIVMSG $channel :12Qui ça 04$nick12 ?"
		return 1
	}
	tapavu:pubreq $nick $uhost $hand $channel $arg 0
}



Allons plus loin (expérimental et a tester) :
tcl
proc isCAP_Available { } {
	if { [info commands cap] == "" } {
		return 0;
	} else {
		return 1;
	}
}
proc CAP_List { } {
	if { ![isCAP_Available] } { return -1; }
	if { [catch { set CAP_LIST [cap ls] }] } {
		return 0;
	} else {
		return [list ${CAP_LIST}];
	}
}
proc isCAP_Found { CAP_NAME } {
	set List_CAPS	[CAP_List]
	if { $List_CAPS == "-1" } { return "CAPS non pris en charge par le serveur IRC"; }
	if { $List_CAPS == "0" } { return "La commande '\[cap ls\]' est indisponible sur ce eggdrop"; }
	if { [string match -nocase *$CAP_NAME* $List_CAPS] } {
		return 1;
	}
	return 0;
}
proc UserIsIdentified { nick } {
	# Nouvelle methode proposer par McDeffice (eggdrop.fr)
	# 
	# Necesite eggdrop 1.9.x min et ajouter dans eggdrop.fr :
	# set cap-request "account-notify extended-join"
	# https://github.com/eggheads/eggdrop/blob/develop/eggdrop.conf#L1122
	if { [isCAP_Found account-notify] == 1 && [info commands isidentified] != ""} { return [isidentified $nick] }
 
	# Methode moins critiqué ... :
 
	# ICI ........ ???
 
	# Ou rien ...
	return -1;
 
}



Je le sais je suis têtu. J'ai proposer des solutions et des exemples de codes.
  Reply
#18
(21/01/2021, 17:43)CrazyCat Wrote: Je ne sais pas si beaucoup de réseaux sont passés en IRCv3 et eggdrop1.9 est toujours en phase de développement, donc plutôt confidentiel.

version 1.9.0 RC (release candidat) sorti ..

Quote:CAP support, with native support for some IRCv3 features

Je sais, ce n'ai qu'une RC ! et que 82% des serveur unrealircd qui ont le support IRCv3
  Reply
#19
Oui, ce n'est qu'une RC mais enfin elle arrive.

Je ferai un post à ce sujet dans quelques heures.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
  Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Fonction banlist MewT 2 3,276 23/11/2010, 17:56
Last Post: MewT
  fonction str2hex [résolu] MenzAgitat 4 4,021 25/05/2009, 16:58
Last Post: MenzAgitat

Forum Jump:


Users browsing this thread: 1 Guest(s)