<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Communauté Eggdrop - Scripts]]></title>
		<link>https://forum.eggdrop.fr/</link>
		<description><![CDATA[Communauté Eggdrop - https://forum.eggdrop.fr]]></description>
		<pubDate>Sat, 09 May 2026 09:03:53 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[#dico.py v1.0 - Script Eggdrop]]></title>
			<link>https://forum.eggdrop.fr/showthread.php?tid=1852</link>
			<pubDate>Fri, 06 Mar 2026 20:10:28 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.eggdrop.fr/member.php?action=profile&uid=4125">zandyani</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.eggdrop.fr/showthread.php?tid=1852</guid>
			<description><![CDATA[## ⚠️ Version BETA (Test)<br />
<br />
Ce script est actuellement en **version bêta** et est fourni à titre de **test**. <br />
<br />
Il a été développé avec l'assistance d'une **intelligence artificielle** et a été validé par :<br />
- ✅ 45 tests unitaires (tous passants)<br />
- ✅ 8 stress tests anti-flood (tous passants)<br />
- ✅ Vérification manuelle des fonctionnalités<br />
<br />
**Les retours et signalements de bugs sont les bienvenus !**<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://forum.eggdrop.fr/images/attachtypes/python-32.png" title="python" border="0" alt=".py" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=329" target="_blank" title="">dicoReverso.py</a> (Taille : 33.33 Ko / Téléchargements : 1)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[## ⚠️ Version BETA (Test)<br />
<br />
Ce script est actuellement en **version bêta** et est fourni à titre de **test**. <br />
<br />
Il a été développé avec l'assistance d'une **intelligence artificielle** et a été validé par :<br />
- ✅ 45 tests unitaires (tous passants)<br />
- ✅ 8 stress tests anti-flood (tous passants)<br />
- ✅ Vérification manuelle des fonctionnalités<br />
<br />
**Les retours et signalements de bugs sont les bienvenus !**<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://forum.eggdrop.fr/images/attachtypes/python-32.png" title="python" border="0" alt=".py" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=329" target="_blank" title="">dicoReverso.py</a> (Taille : 33.33 Ko / Téléchargements : 1)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Recherche ;)]]></title>
			<link>https://forum.eggdrop.fr/showthread.php?tid=1827</link>
			<pubDate>Sun, 27 Apr 2025 11:30:47 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.eggdrop.fr/member.php?action=profile&uid=4214">Nuxium</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.eggdrop.fr/showthread.php?tid=1827</guid>
			<description><![CDATA[Coucou déjà félicitations pr le site et les téléchargements de TCL qui sont tjrs dispo c'est compliquer de trouver des choses qui date pr se faire des délires nostalgie :p<br />
<br />
<br />
Je voulait savoir si qqun ici aurais en stock, entrechat (ircu de nix), hakusho et diogene.tcl ? et également un CS5.1 celui que j'ai est ultra buggué :x<br />
<br />
Petit délire nostalgique si qqun passe ici un grand merci par avance ;)<br />
kiss<br />
<br />
Nuxium]]></description>
			<content:encoded><![CDATA[Coucou déjà félicitations pr le site et les téléchargements de TCL qui sont tjrs dispo c'est compliquer de trouver des choses qui date pr se faire des délires nostalgie :p<br />
<br />
<br />
Je voulait savoir si qqun ici aurais en stock, entrechat (ircu de nix), hakusho et diogene.tcl ? et également un CS5.1 celui que j'ai est ultra buggué :x<br />
<br />
Petit délire nostalgique si qqun passe ici un grand merci par avance ;)<br />
kiss<br />
<br />
Nuxium]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Besoin de shoutcast.tcl]]></title>
			<link>https://forum.eggdrop.fr/showthread.php?tid=1822</link>
			<pubDate>Fri, 11 Apr 2025 15:49:09 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.eggdrop.fr/member.php?action=profile&uid=4213">dot.ku</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.eggdrop.fr/showthread.php?tid=1822</guid>
			<description><![CDATA[J'ai besoin de Shoutcast.tcl, tous les tcl que j'ai trouvés donnent une erreur<br />
Existe-t-il un tcl qui fonctionne bien avec eggdrop 1.10.0 ?]]></description>
			<content:encoded><![CDATA[J'ai besoin de Shoutcast.tcl, tous les tcl que j'ai trouvés donnent une erreur<br />
Existe-t-il un tcl qui fonctionne bien avec eggdrop 1.10.0 ?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[mon test script assisté par une ia]]></title>
			<link>https://forum.eggdrop.fr/showthread.php?tid=1821</link>
			<pubDate>Sun, 06 Apr 2025 22:14:43 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.eggdrop.fr/member.php?action=profile&uid=4125">zandyani</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.eggdrop.fr/showthread.php?tid=1821</guid>
			<description><![CDATA[salut la  communauté ,<br />
vais vous proposer un petit travail assisté par une ia , vous pouvez s'en servir ou ça nous sert pour discuter et à le développer aussi<br />
<br />
<div class="codeblock"><div class="title">tcl<button class="copy">copier</button></div><div class="body"><code><pre class="tcl" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># -----------------------------------------------------------------------------</span>
<span style="color: #808080; font-style: italic;"># Script YouTube pour Eggdrop Bot IRC</span>
<span style="color: #808080; font-style: italic;"># Version : 1.1.16</span>
<span style="color: #808080; font-style: italic;"># Description : Ce script permet d'intégrer des fonctionnalités YouTube dans un bot IRC.</span>
<span style="color: #808080; font-style: italic;">#               Il permet de rechercher des vidéos YouTube, de détecter automatiquement</span>
<span style="color: #808080; font-style: italic;">#               les liens YouTube partagés dans le chat, et d'afficher des informations</span>
<span style="color: #808080; font-style: italic;">#               détaillées sur les vidéos.</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># Prérequis :</span>
<span style="color: #808080; font-style: italic;"># - Tcl 8.6 ou supérieur</span>
<span style="color: #808080; font-style: italic;"># - Packages Tcl : http, json, tls</span>
<span style="color: #808080; font-style: italic;"># - Clé API YouTube valide (à configurer par l'utilisateur)</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># Commandes :</span>
<span style="color: #808080; font-style: italic;"># - !yt &lt;terme&gt; : Recherche une vidéo YouTube basée sur le terme de recherche fourni.</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># Fonctionnalités :</span>
<span style="color: #808080; font-style: italic;"># - Détection automatique des liens YouTube et affichage des détails des vidéos.</span>
<span style="color: #808080; font-style: italic;"># - Mise en cache des résultats de recherche pour optimiser les appels API.</span>
<span style="color: #808080; font-style: italic;"># - Formatage des messages pour une présentation claire des informations.</span>
<span style="color: #808080; font-style: italic;"># -----------------------------------------------------------------------------</span>
<span style="color: #808080; font-style: italic;">
# ---------------------------------------------------------------------</span>
<span style="color: #808080; font-style: italic;"># Configuration Utilisateur</span>
<span style="color: #808080; font-style: italic;"># ---------------------------------------------------------------------</span>
<span style="color: #808080; font-style: italic;"># Veuillez entrer votre clé API YouTube ci-dessous</span>
<span style="color: #ff7700;font-weight:bold;">namespace</span> <span style="color: #ff7700;font-weight:bold;">eval</span> ::<span style="color: black;">youtube</span> <span style="color: black;">&#123;</span><span style="color: #808080; font-style: italic;">
    # Clé API YouTube (à configurer par l'utilisateur)</span>
    <span style="color: #ff7700;font-weight:bold;">variable</span> api_key <span style="color: #483d8b;">&quot;VOTRE_CLE_ICI&quot;</span>
<span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
# ---------------------------------------------------------------------</span>
<span style="color: #808080; font-style: italic;"># Script Principal (Ne modifiez rien ci-dessous)</span>
<span style="color: #808080; font-style: italic;"># ---------------------------------------------------------------------</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">namespace</span> <span style="color: #ff7700;font-weight:bold;">eval</span> ::<span style="color: black;">youtube</span> <span style="color: black;">&#123;</span><span style="color: #808080; font-style: italic;">
    # Version du script</span>
    <span style="color: #ff7700;font-weight:bold;">variable</span> script_version <span style="color: #483d8b;">&quot;1.1.16&quot;</span>
<span style="color: #808080; font-style: italic;">    # Préfixe pour les messages YouTube</span>
    <span style="color: #ff7700;font-weight:bold;">variable</span> yt_prefix <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;0</span>0301,00You<span style="color: #000099; font-weight: bold;">&#092;0</span>0300,04Tube<span style="color: #000099; font-weight: bold;">&#092;0</span>17&quot;</span>
<span style="color: #808080; font-style: italic;">    # Cache pour stocker les résultats de recherche</span>
    <span style="color: #ff7700;font-weight:bold;">variable</span> cache
<span style="color: #808080; font-style: italic;">    # Cache pour stocker les résultats automatiques</span>
    <span style="color: #ff7700;font-weight:bold;">variable</span> auto_cache
<span style="color: #808080; font-style: italic;">
    # S'assurer que la version de Tcl est 8.6 ou supérieure pour le support Unicode</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">catch</span> <span style="color: black;">&#123;</span><span style="color: #008000;">package</span> require Tcl <span style="color: #ff4500;">8.6</span><span style="color: black;">&#125;</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        putlog <span style="color: #483d8b;">&quot;Attention : Tcl &lt; 8.6 détecté - Unicode limité&quot;</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Procédure d'initialisation</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> init <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span><span style="color: #808080; font-style: italic;">
        # Packages requis</span>
        <span style="color: #ff7700;font-weight:bold;">foreach</span> pkg <span style="color: black;">&#123;</span><span style="color: #008000;">http</span> json tls<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">catch</span> <span style="color: black;">&#123;</span><span style="color: #008000;">package</span> require <span style="color: #ff3333;">&#36;pkg</span><span style="color: black;">&#125;</span> err<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
                <span style="color: #ff7700;font-weight:bold;">error</span> <span style="color: #483d8b;">&quot;Package requis manquant : &#36;pkg&quot;</span>
            <span style="color: black;">&#125;</span>
        <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">        # Initialiser les caches</span>
        array <span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">cache</span> <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>
        array <span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">auto_cache</span> <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">        # Définir le flag YouTube s'il n'est pas déjà défini</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span><span style="color: #008000;">info</span> exists ::<span style="color: black;">youtube_flag_defined</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            setudef flag youtube
            <span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">youtube_flag_defined</span> <span style="color: #ff4500;">1</span>
        <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">        # Lier les commandes à leurs procédures respectives</span>
        bind pub - <span style="color: #483d8b;">&quot;!yt&quot;</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">pub</span>:youtube
        bind pubm - <span style="color: #483d8b;">&quot;*youtube*&quot;</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">pubm</span>:youtube_auto
        bind pubm - <span style="color: #483d8b;">&quot;*youtu.be*&quot;</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">pubm</span>:youtube_auto
<span style="color: #808080; font-style: italic;">        
        # Message de confirmation du chargement du script</span>
        putlog <span style="color: #483d8b;">&quot;Script YouTube version &#36;::youtube::script_version chargé. Pour l'activer, utilisez la commande : .chanset #channel +youtube&quot;</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Procédure pour envoyer un message YouTube</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> send_youtube_message <span style="color: black;">&#123;</span>target message <span style="color: black;">&#123;</span>type <span style="color: #483d8b;">&quot;PRIVMSG&quot;</span><span style="color: black;">&#125;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #ff7700;font-weight:bold;">variable</span> yt_prefix
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;type</span> eq <span style="color: #483d8b;">&quot;PRIVMSG&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            puthelp <span style="color: #483d8b;">&quot;PRIVMSG &#36;target :&#36;{yt_prefix}<span style="color: #000099; font-weight: bold;">&#092;0</span>03 &#36;message&quot;</span>
        <span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">elseif</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;type</span> eq <span style="color: #483d8b;">&quot;NOTICE&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            puthelp <span style="color: #483d8b;">&quot;NOTICE &#36;target :&#36;message<span style="color: #000099; font-weight: bold;">&#092;0</span>03&quot;</span>
        <span style="color: black;">&#125;</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Procédure pour vérifier si YouTube est activé pour un canal</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> check_youtube_enabled <span style="color: black;">&#123;</span>chan <span style="color: black;">&#123;</span>silent <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> enabled <span style="color: black;">&#91;</span>channel get <span style="color: #ff3333;">&#36;chan</span> youtube<span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: #ff3333;">&#36;enabled</span> <span style="color: #66cc66;">&amp;&amp;</span> <span style="color: #66cc66;">!</span><span style="color: #ff3333;">&#36;silent</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #483d8b;">&quot;Erreur : YouTube non activé (activer via DCC chat)&quot;</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff3333;">&#36;enabled</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Gestionnaire pour la commande !yt</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> pub:youtube <span style="color: black;">&#123;</span>nick host hand chan arg<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #ff7700;font-weight:bold;">variable</span> cache
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span>check_youtube_enabled <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> query <span style="color: black;">&#91;</span><span style="color: #008000;">string</span> trim <span style="color: #ff3333;">&#36;arg</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;query</span> eq <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #483d8b;">&quot;Utilisation : !yt &lt;terme&gt;&quot;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">info</span> exists cache<span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;query</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #ff3333;">&#36;cache</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;query</span><span style="color: black;">&#41;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">title</span> title
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">video_id</span> video_id
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">catch</span> <span style="color: black;">&#123;</span>search_youtube <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;chan</span> <span style="color: #ff3333;">&#36;query</span><span style="color: black;">&#125;</span> err<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #483d8b;">&quot;Erreur : &#36;err&quot;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">channel_title</span> channel_title
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">duration</span> duration
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">views</span> views
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">published_at</span> published_at
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">video_link</span> video_link
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">catch</span> <span style="color: black;">&#123;</span>process_youtube_url <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;chan</span> <span style="color: #ff3333;">&#36;video_id</span> <span style="color: #ff3333;">&#36;query</span><span style="color: black;">&#125;</span> err<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #483d8b;">&quot;Erreur lors de la récupération des détails : &#36;err&quot;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> message <span style="color: black;">&#91;</span>format_yt_message <span style="color: black;">&#91;</span><span style="color: #008000;">list</span> <span style="color: #ff3333;">&#36;title</span> <span style="color: #ff3333;">&#36;channel_title</span> <span style="color: #ff3333;">&#36;duration</span> <span style="color: #ff3333;">&#36;views</span> <span style="color: #ff3333;">&#36;published_at</span> <span style="color: #ff3333;">&#36;video_link</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> cache<span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;query</span><span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;message</span>
        utimer <span style="color: #ff4500;">300</span> <span style="color: black;">&#91;</span><span style="color: #008000;">list</span> unset ::<span style="color: black;">youtube</span>::<span style="color: black;">cache</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;query</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
        send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #ff3333;">&#36;message</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Gestionnaire pour la détection automatique des liens YouTube dans les messages</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> pubm:youtube_auto <span style="color: black;">&#123;</span>nick host hand chan text<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #ff7700;font-weight:bold;">variable</span> auto_cache
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span>check_youtube_enabled <span style="color: #ff3333;">&#36;chan</span> <span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">string</span> match <span style="color: #483d8b;">&quot;!yt*&quot;</span> <span style="color: #ff3333;">&#36;text</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> youtube_pattern <span style="color: black;">&#123;</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">?</span>:https<span style="color: #66cc66;">?</span>://<span style="color: black;">&#41;</span><span style="color: #66cc66;">?</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">?</span>:www&#092;.|m&#092;.<span style="color: black;">&#41;</span><span style="color: #66cc66;">?</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">?</span>:youtube&#092;.com/<span style="color: black;">&#40;</span><span style="color: #66cc66;">?</span>:watch&#092;<span style="color: #66cc66;">?</span>v=|shorts/|embed/|live/<span style="color: black;">&#41;</span>|youtu&#092;.be/<span style="color: black;">&#41;</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span>^<span style="color: #66cc66;">&amp;</span>&#092;s&#092;<span style="color: #66cc66;">?</span><span style="color: black;">&#93;</span>+<span style="color: black;">&#41;</span><span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> music_pattern <span style="color: black;">&#123;</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">?</span>:https<span style="color: #66cc66;">?</span>://<span style="color: black;">&#41;</span><span style="color: #66cc66;">?</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">?</span>:www&#092;.|m&#092;.<span style="color: black;">&#41;</span><span style="color: #66cc66;">?</span>music&#092;.youtube&#092;.com/watch&#092;<span style="color: #66cc66;">?</span>v=<span style="color: black;">&#40;</span><span style="color: black;">&#91;</span>^<span style="color: #66cc66;">&amp;</span>&#092;s&#092;<span style="color: #66cc66;">?</span><span style="color: black;">&#93;</span>+<span style="color: black;">&#41;</span><span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span><span style="color: #008000;">regexp</span> <span style="color: #ff3333;">&#36;youtube_pattern</span> <span style="color: #ff3333;">&#36;text</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">&amp;&amp;</span> <span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span><span style="color: #008000;">regexp</span> <span style="color: #ff3333;">&#36;music_pattern</span> <span style="color: #ff3333;">&#36;text</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#125;</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">set</span> ids <span style="color: black;">&#91;</span><span style="color: #008000;">regexp</span> -all -inline <span style="color: #ff3333;">&#36;youtube_pattern</span> <span style="color: #ff3333;">&#36;text</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> music_ids <span style="color: black;">&#91;</span><span style="color: #008000;">regexp</span> -all -inline <span style="color: #ff3333;">&#36;music_pattern</span> <span style="color: #ff3333;">&#36;text</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">foreach</span> <span style="color: black;">&#123;</span>match id<span style="color: black;">&#125;</span> <span style="color: #ff3333;">&#36;ids</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">info</span> exists auto_cache<span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;id</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
                send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #ff3333;">&#36;auto_cache</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;id</span><span style="color: black;">&#41;</span>
                <span style="color: #ff7700;font-weight:bold;">continue</span>
            <span style="color: black;">&#125;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">catch</span> <span style="color: black;">&#123;</span>process_youtube_url <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;chan</span> <span style="color: #ff3333;">&#36;id</span> <span style="color: #ff3333;">&#36;text</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span> err<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
                <span style="color: #ff7700;font-weight:bold;">continue</span>
            <span style="color: black;">&#125;</span>
            <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">title</span> title
            <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">channel_title</span> channel_title
            <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">duration</span> duration
            <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">views</span> views
            <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">published_at</span> published_at
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;title</span> eq <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
                <span style="color: #ff7700;font-weight:bold;">continue</span>
            <span style="color: black;">&#125;</span>
            <span style="color: #ff7700;font-weight:bold;">set</span> message <span style="color: black;">&#91;</span>format_yt_message <span style="color: black;">&#91;</span><span style="color: #008000;">list</span> <span style="color: #ff3333;">&#36;title</span> <span style="color: #ff3333;">&#36;channel_title</span> <span style="color: #ff3333;">&#36;duration</span> <span style="color: #ff3333;">&#36;views</span> <span style="color: #ff3333;">&#36;published_at</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
            <span style="color: #ff7700;font-weight:bold;">set</span> auto_cache<span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;id</span><span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;message</span>
            utimer <span style="color: #ff4500;">300</span> <span style="color: black;">&#91;</span><span style="color: #008000;">list</span> unset ::<span style="color: black;">youtube</span>::<span style="color: black;">auto_cache</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;id</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
            send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #ff3333;">&#36;message</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">foreach</span> <span style="color: black;">&#123;</span>match music_id<span style="color: black;">&#125;</span> <span style="color: #ff3333;">&#36;music_ids</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">info</span> exists auto_cache<span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;music_id</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
                send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #ff3333;">&#36;auto_cache</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;music_id</span><span style="color: black;">&#41;</span>
                <span style="color: #ff7700;font-weight:bold;">continue</span>
            <span style="color: black;">&#125;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">catch</span> <span style="color: black;">&#123;</span>process_youtube_url <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;chan</span> <span style="color: #ff3333;">&#36;music_id</span> <span style="color: #ff3333;">&#36;text</span> <span style="color: #483d8b;">&quot;music&quot;</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span> err<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
                <span style="color: #ff7700;font-weight:bold;">continue</span>
            <span style="color: black;">&#125;</span>
            <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">title</span> title
            <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">channel_title</span> channel_title
            <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">duration</span> duration
            <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">views</span> views
            <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">published_at</span> published_at
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;title</span> eq <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
                <span style="color: #ff7700;font-weight:bold;">continue</span>
            <span style="color: black;">&#125;</span>
            <span style="color: #ff7700;font-weight:bold;">set</span> message <span style="color: black;">&#91;</span>format_yt_message <span style="color: black;">&#91;</span><span style="color: #008000;">list</span> <span style="color: #ff3333;">&#36;title</span> <span style="color: #ff3333;">&#36;channel_title</span> <span style="color: #ff3333;">&#36;duration</span> <span style="color: #ff3333;">&#36;views</span> <span style="color: #ff3333;">&#36;published_at</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
            <span style="color: #ff7700;font-weight:bold;">set</span> auto_cache<span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;music_id</span><span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;message</span>
            utimer <span style="color: #ff4500;">300</span> <span style="color: black;">&#91;</span><span style="color: #008000;">list</span> unset ::<span style="color: black;">youtube</span>::<span style="color: black;">auto_cache</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;music_id</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
            send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #ff3333;">&#36;message</span>
        <span style="color: black;">&#125;</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Procédure pour encoder une requête URL</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> url_encode <span style="color: black;">&#123;</span>query<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> encoded <span style="color: #483d8b;">&quot;&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">foreach</span> char <span style="color: black;">&#91;</span><span style="color: #008000;">split</span> <span style="color: #ff3333;">&#36;query</span> <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#93;</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">regexp</span> <span style="color: black;">&#123;</span>^<span style="color: black;">&#91;</span>a-zA-Z0-<span style="color: #ff4500;">9</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">&#36;</span><span style="color: black;">&#125;</span> <span style="color: #ff3333;">&#36;char</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
                <span style="color: #008000;">append</span> encoded <span style="color: #ff3333;">&#36;char</span>
            <span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">else</span> <span style="color: black;">&#123;</span>
                <span style="color: #008000;">scan</span> <span style="color: #ff3333;">&#36;char</span> <span style="color: #66cc66;">%</span>c code
                <span style="color: #008000;">append</span> encoded <span style="color: black;">&#91;</span><span style="color: #008000;">format</span> <span style="color: #483d8b;">&quot;%%%02X&quot;</span> <span style="color: #ff3333;">&#36;code</span><span style="color: black;">&#93;</span>
            <span style="color: black;">&#125;</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff3333;">&#36;encoded</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Procédure pour nettoyer et formater les titres des vidéos</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> clean_title <span style="color: black;">&#123;</span>title <span style="color: black;">&#123;</span>keep_emojis <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> cleaned <span style="color: #ff3333;">&#36;title</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: #ff3333;">&#36;keep_emojis</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">set</span> cleaned <span style="color: black;">&#91;</span><span style="color: #008000;">string</span> map <span style="color: black;">&#123;</span>
                <span style="color: #483d8b;">&quot;í ¼í·©í ¼í·¿&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;í ¼í·²í ¼í·¦&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;í ¼í·¨&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;í ¼í·§&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> 
                <span style="color: #483d8b;">&quot;í ¼í·ª&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;í ¼í·«&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;í ¼í·¬&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;í ¼í·­&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> 
                <span style="color: #483d8b;">&quot;í ¼í·®&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;í ¼í·¯&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;í ¼í·°&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;í ¼í·±&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> 
                <span style="color: #483d8b;">&quot;í ¼í¸&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;í ¼í¹&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;í ¼íº&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;í ¼í»&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> 
                <span style="color: #483d8b;">&quot;í&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;¼&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;ÿ&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">&#092;n</span>&quot;</span> <span style="color: #483d8b;">&quot; &quot;</span>
            <span style="color: black;">&#125;</span> <span style="color: #ff3333;">&#36;cleaned</span><span style="color: black;">&#93;</span>
            <span style="color: #008000;">regsub</span> -all <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span>^<span style="color: black;">&#91;</span>:alnum:<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>:space:<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>:punct:<span style="color: black;">&#93;</span>&#092;u4e00-&#092;u9FFF<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: #ff3333;">&#36;cleaned</span> <span style="color: #483d8b;">&quot;&quot;</span> cleaned
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#91;</span><span style="color: #008000;">string</span> trim <span style="color: #ff3333;">&#36;cleaned</span><span style="color: black;">&#93;</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Procédure pour récupérer les données YouTube avec des tentatives répétées</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> fetch_youtube_data <span style="color: black;">&#123;</span>url chan<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #ff7700;font-weight:bold;">catch</span> <span style="color: black;">&#123;</span><span style="color: #008000;">package</span> require tls<span style="color: black;">&#125;</span>
        ::<span style="color: #008000;">http</span>::<span style="color: black;">register</span> https <span style="color: #ff4500;">443</span> <span style="color: black;">&#91;</span><span style="color: #008000;">list</span> ::<span style="color: black;">tls</span>::<span style="color: #008000;">socket</span> -tls1 <span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> token <span style="color: #483d8b;">&quot;&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">for</span> <span style="color: black;">&#123;</span><span style="color: #ff7700;font-weight:bold;">set</span> i <span style="color: #ff4500;">1</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;i</span> <span style="color: #66cc66;">&lt;</span>= <span style="color: #ff4500;">5</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span><span style="color: #008000;">incr</span> i<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">catch</span> <span style="color: black;">&#123;</span><span style="color: #ff7700;font-weight:bold;">set</span> token <span style="color: black;">&#91;</span>::<span style="color: #008000;">http</span>::<span style="color: black;">geturl</span> <span style="color: #ff3333;">&#36;url</span> -timeout <span style="color: #ff4500;">5000</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> err<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
                <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;i</span> == <span style="color: #ff4500;">5</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
                    ::<span style="color: #008000;">http</span>::<span style="color: black;">unregister</span> https
                    send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #483d8b;">&quot;Erreur HTTP après 5 tentatives : &#36;err&quot;</span>
                    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;&quot;</span>
                <span style="color: black;">&#125;</span>
                after <span style="color: #ff4500;">1000</span>
                <span style="color: #ff7700;font-weight:bold;">continue</span>
            <span style="color: black;">&#125;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span>::<span style="color: #008000;">http</span>::<span style="color: black;">status</span> <span style="color: #ff3333;">&#36;token</span><span style="color: black;">&#93;</span> eq <span style="color: #483d8b;">&quot;ok&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">break</span> <span style="color: black;">&#125;</span>
            <span style="color: #ff7700;font-weight:bold;">set</span> err_msg <span style="color: black;">&#91;</span>::<span style="color: #008000;">http</span>::<span style="color: #ff7700;font-weight:bold;">error</span> <span style="color: #ff3333;">&#36;token</span><span style="color: black;">&#93;</span>
            <span style="color: #ff7700;font-weight:bold;">switch</span> -exact <span style="color: black;">&#91;</span>::<span style="color: #008000;">http</span>::<span style="color: black;">ncode</span> <span style="color: #ff3333;">&#36;token</span><span style="color: black;">&#93;</span> <span style="color: black;">&#123;</span>
                <span style="color: #ff4500;">429</span> <span style="color: black;">&#123;</span>
                    send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #483d8b;">&quot;Erreur : Limite de requêtes atteinte, réessayez plus tard.&quot;</span>
                    ::<span style="color: #008000;">http</span>::<span style="color: black;">cleanup</span> <span style="color: #ff3333;">&#36;token</span>
                    ::<span style="color: #008000;">http</span>::<span style="color: black;">unregister</span> https
                    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;&quot;</span>
                <span style="color: black;">&#125;</span>
                <span style="color: #ff4500;">403</span> <span style="color: black;">&#123;</span>
                    <span style="color: #ff7700;font-weight:bold;">set</span> raw_response <span style="color: black;">&#91;</span>::<span style="color: #008000;">http</span>::<span style="color: black;">data</span> <span style="color: #ff3333;">&#36;token</span><span style="color: black;">&#93;</span>
                    putlog <span style="color: #483d8b;">&quot;Erreur YouTube API (HTTP 403): &#36;raw_response&quot;</span>
                    ::<span style="color: #008000;">http</span>::<span style="color: black;">cleanup</span> <span style="color: #ff3333;">&#36;token</span>
                    ::<span style="color: #008000;">http</span>::<span style="color: black;">unregister</span> https
                    send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #483d8b;">&quot;Erreur : Vidéo privée ou restrictions activées.&quot;</span>
                    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;&quot;</span>
                <span style="color: black;">&#125;</span>
                <span style="color: #ff4500;">404</span> <span style="color: black;">&#123;</span>
                    <span style="color: #ff7700;font-weight:bold;">set</span> raw_response <span style="color: black;">&#91;</span>::<span style="color: #008000;">http</span>::<span style="color: black;">data</span> <span style="color: #ff3333;">&#36;token</span><span style="color: black;">&#93;</span>
                    putlog <span style="color: #483d8b;">&quot;Erreur YouTube API (HTTP 404): &#36;raw_response&quot;</span>
                    ::<span style="color: #008000;">http</span>::<span style="color: black;">cleanup</span> <span style="color: #ff3333;">&#36;token</span>
                    ::<span style="color: #008000;">http</span>::<span style="color: black;">unregister</span> https
                    send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #483d8b;">&quot;Erreur : Vidéo supprimée ou introuvable.&quot;</span>
                    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;&quot;</span>
                <span style="color: black;">&#125;</span>
            <span style="color: black;">&#125;</span>
            ::<span style="color: #008000;">http</span>::<span style="color: black;">cleanup</span> <span style="color: #ff3333;">&#36;token</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;i</span> == <span style="color: #ff4500;">5</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
                ::<span style="color: #008000;">http</span>::<span style="color: black;">unregister</span> https
                send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #483d8b;">&quot;Erreur HTTP après 5 tentatives : &#36;err_msg&quot;</span>
                <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;&quot;</span>
            <span style="color: black;">&#125;</span>
            after <span style="color: #ff4500;">1000</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> data <span style="color: black;">&#91;</span>::<span style="color: #008000;">http</span>::<span style="color: black;">data</span> <span style="color: #ff3333;">&#36;token</span><span style="color: black;">&#93;</span>
        ::<span style="color: #008000;">http</span>::<span style="color: black;">cleanup</span> <span style="color: #ff3333;">&#36;token</span>
        ::<span style="color: #008000;">http</span>::<span style="color: black;">unregister</span> https
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">string</span> trim <span style="color: #ff3333;">&#36;data</span><span style="color: black;">&#93;</span> eq <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #483d8b;">&quot;Erreur : Réponse vide de l’API&quot;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;&quot;</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">catch</span> <span style="color: black;">&#123;</span><span style="color: #ff7700;font-weight:bold;">set</span> json_data <span style="color: black;">&#91;</span>::<span style="color: black;">json</span>::<span style="color: black;">json2dict</span> <span style="color: #ff3333;">&#36;data</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> err<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #483d8b;">&quot;Erreur JSON : &#36;err&quot;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;&quot;</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff3333;">&#36;json_data</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Procédure pour récupérer les données de chaîne depuis l'API YouTube</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> fetch_channel_data <span style="color: black;">&#123;</span>url chan type<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> json_data <span style="color: black;">&#91;</span>fetch_youtube_data <span style="color: #ff3333;">&#36;url</span> <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;json_data</span> eq <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;&quot;</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span>dict exists <span style="color: #ff3333;">&#36;json_data</span> items<span style="color: black;">&#93;</span> || <span style="color: black;">&#91;</span><span style="color: #008000;">llength</span> <span style="color: black;">&#91;</span>dict get <span style="color: #ff3333;">&#36;json_data</span> items<span style="color: black;">&#93;</span><span style="color: black;">&#93;</span> == <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;&quot;</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#91;</span><span style="color: #008000;">lindex</span> <span style="color: black;">&#91;</span>dict get <span style="color: #ff3333;">&#36;json_data</span> items<span style="color: black;">&#93;</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Procédure pour formater un message YouTube</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> format_yt_message <span style="color: black;">&#123;</span>parts <span style="color: black;">&#123;</span>separator <span style="color: #483d8b;">&quot;|&quot;</span><span style="color: black;">&#125;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> message <span style="color: #483d8b;">&quot;&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> first <span style="color: #ff4500;">1</span>
        <span style="color: #ff7700;font-weight:bold;">foreach</span> part <span style="color: #ff3333;">&#36;parts</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;first</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
                <span style="color: #008000;">append</span> message <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;part<span style="color: #000099; font-weight: bold;">&#092;0</span>02 &quot;</span>
                <span style="color: #ff7700;font-weight:bold;">set</span> first <span style="color: #ff4500;">0</span>
            <span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">else</span> <span style="color: black;">&#123;</span>
                <span style="color: #008000;">append</span> message <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">&#092;0</span>0304&#36;{separator}<span style="color: #000099; font-weight: bold;">&#092;0</span>03 &#36;part&quot;</span>
            <span style="color: black;">&#125;</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #008000;">append</span> message <span style="color: #483d8b;">&quot; <span style="color: #000099; font-weight: bold;">&#092;0</span>0304&#36;{separator}<span style="color: #000099; font-weight: bold;">&#092;0</span>03&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#91;</span><span style="color: #008000;">string</span> trim <span style="color: #ff3333;">&#36;message</span><span style="color: black;">&#93;</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Procédure pour rechercher des vidéos YouTube</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> search_youtube <span style="color: black;">&#123;</span>nick chan query<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #ff7700;font-weight:bold;">variable</span> api_key
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">title</span> title
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">video_id</span> video_id
        <span style="color: #ff7700;font-weight:bold;">set</span> formatted_query <span style="color: black;">&#91;</span>url_encode <span style="color: #ff3333;">&#36;query</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> url <span style="color: #483d8b;">&quot;https://www.googleapis.com/youtube/v3/search?part=snippet&amp;q=&#36;formatted_query&amp;type=video&amp;key=&#36;api_key&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> json_data <span style="color: black;">&#91;</span>fetch_youtube_data <span style="color: #ff3333;">&#36;url</span> <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;json_data</span> eq <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> 
            <span style="color: #ff7700;font-weight:bold;">error</span> <span style="color: #483d8b;">&quot;Échec de la recherche&quot;</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> video <span style="color: black;">&#91;</span><span style="color: #008000;">lindex</span> <span style="color: black;">&#91;</span>dict get <span style="color: #ff3333;">&#36;json_data</span> items<span style="color: black;">&#93;</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span>dict exists <span style="color: #ff3333;">&#36;video</span> id<span style="color: black;">&#93;</span> || <span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span>dict exists <span style="color: #ff3333;">&#36;video</span> snippet<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> 
            <span style="color: #ff7700;font-weight:bold;">error</span> <span style="color: #483d8b;">&quot;Aucune vidéo trouvée pour cette recherche&quot;</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> id_dict <span style="color: black;">&#91;</span>dict get <span style="color: #ff3333;">&#36;video</span> id<span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> snippet_dict <span style="color: black;">&#91;</span>dict get <span style="color: #ff3333;">&#36;video</span> snippet<span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span>dict exists <span style="color: #ff3333;">&#36;id_dict</span> videoId<span style="color: black;">&#93;</span> || <span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span>dict exists <span style="color: #ff3333;">&#36;snippet_dict</span> title<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> 
            <span style="color: #ff7700;font-weight:bold;">error</span> <span style="color: #483d8b;">&quot;ID ou titre manquant&quot;</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> title <span style="color: black;">&#91;</span>clean_title <span style="color: black;">&#91;</span>dict get <span style="color: #ff3333;">&#36;snippet_dict</span> title<span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> video_id <span style="color: black;">&#91;</span>dict get <span style="color: #ff3333;">&#36;id_dict</span> videoId<span style="color: black;">&#93;</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Procédure pour formater la durée d'une vidéo</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> format_duration <span style="color: black;">&#123;</span>duration<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;duration</span> eq <span style="color: #483d8b;">&quot;P0D&quot;</span> || <span style="color: #ff3333;">&#36;duration</span> eq <span style="color: #483d8b;">&quot;PT0S&quot;</span> || <span style="color: #ff3333;">&#36;duration</span> eq <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;Live&quot;</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span><span style="color: #008000;">regexp</span> <span style="color: black;">&#123;</span>PT<span style="color: black;">&#40;</span><span style="color: #66cc66;">?</span>:<span style="color: black;">&#40;</span>&#092;d+<span style="color: black;">&#41;</span>H<span style="color: black;">&#41;</span><span style="color: #66cc66;">?</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">?</span>:<span style="color: black;">&#40;</span>&#092;d+<span style="color: black;">&#41;</span>M<span style="color: black;">&#41;</span><span style="color: #66cc66;">?</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">?</span>:<span style="color: black;">&#40;</span>&#092;d+<span style="color: black;">&#41;</span>S<span style="color: black;">&#41;</span><span style="color: #66cc66;">?</span><span style="color: black;">&#125;</span> <span style="color: #ff3333;">&#36;duration</span> _ hours minutes seconds<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;En cours de traitement&quot;</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> hours <span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">expr</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;hours</span> ne <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #66cc66;">?</span> <span style="color: #ff3333;">&#36;hours</span> : <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> minutes <span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">expr</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;minutes</span> ne <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #66cc66;">?</span> <span style="color: #ff3333;">&#36;minutes</span> : <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> seconds <span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">expr</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;seconds</span> ne <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #66cc66;">?</span> <span style="color: #ff3333;">&#36;seconds</span> : <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;hours</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;&#36;{hours}h &#36;{minutes}mn &#36;{seconds}s&quot;</span> <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;minutes</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;&#36;{minutes}mn &#36;{seconds}s&quot;</span> <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;&#36;{seconds}s&quot;</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Procédure pour formater le nombre de vues d'une vidéo</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> format_views <span style="color: black;">&#123;</span>views<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span><span style="color: #008000;">string</span> is integer -strict <span style="color: #ff3333;">&#36;views</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;N/A&quot;</span> <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;views</span> <span style="color: #66cc66;">&gt;</span>= <span style="color: #ff4500;">1000000</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#91;</span><span style="color: #008000;">format</span> <span style="color: #483d8b;">&quot;%.1fM&quot;</span> <span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">expr</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;views</span> / <span style="color: #ff4500;">1000000.0</span><span style="color: black;">&#125;</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span> <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;views</span> <span style="color: #66cc66;">&gt;</span>= <span style="color: #ff4500;">1000</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#91;</span><span style="color: #008000;">format</span> <span style="color: #483d8b;">&quot;%.1fK&quot;</span> <span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">expr</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;views</span> / <span style="color: #ff4500;">1000.0</span><span style="color: black;">&#125;</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span> <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff3333;">&#36;views</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Procédure pour formater la date de publication</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> format_published_date <span style="color: black;">&#123;</span>published_at<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #008000;">regsub</span> <span style="color: black;">&#123;</span>&#092;.&#092;d+Z<span style="color: #66cc66;">&#36;</span><span style="color: black;">&#125;</span> <span style="color: #ff3333;">&#36;published_at</span> <span style="color: #483d8b;">&quot;Z&quot;</span> clean_date
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">catch</span> <span style="color: black;">&#123;</span><span style="color: #ff7700;font-weight:bold;">set</span> timestamp <span style="color: black;">&#91;</span><span style="color: #008000;">clock</span> <span style="color: #008000;">scan</span> <span style="color: #ff3333;">&#36;clean_date</span> -<span style="color: #008000;">format</span> <span style="color: #483d8b;">&quot;%Y-%m-%dT%H:%M:%SZ&quot;</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> err<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;Date inconnue&quot;</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#91;</span><span style="color: #008000;">clock</span> <span style="color: #008000;">format</span> <span style="color: #ff3333;">&#36;timestamp</span> -<span style="color: #008000;">format</span> <span style="color: #483d8b;">&quot;%d-%m-%Y&quot;</span><span style="color: black;">&#93;</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Procédure pour traiter l'URL d'une vidéo YouTube</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> process_youtube_url <span style="color: black;">&#123;</span>nick chan id text <span style="color: black;">&#123;</span><span style="color: #008000;">source</span> <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>include_link <span style="color: #ff4500;">1</span><span style="color: black;">&#125;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #ff7700;font-weight:bold;">variable</span> api_key
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">title</span> title
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">channel_title</span> channel_title
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">duration</span> duration
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">views</span> views
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">published_at</span> published_at
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">video_link</span> video_link
        <span style="color: #ff7700;font-weight:bold;">set</span> title <span style="color: #483d8b;">&quot;&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> channel_title <span style="color: #483d8b;">&quot;&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> duration <span style="color: #483d8b;">&quot;&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> views <span style="color: #483d8b;">&quot;&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> published_at <span style="color: #483d8b;">&quot;&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> video_link <span style="color: #483d8b;">&quot;&quot;</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">set</span> url <span style="color: #483d8b;">&quot;https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails,statistics&amp;id=&#36;id&amp;key=&#36;api_key&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> video <span style="color: black;">&#91;</span>fetch_channel_data <span style="color: #ff3333;">&#36;url</span> <span style="color: #ff3333;">&#36;chan</span> <span style="color: #483d8b;">&quot;Vidéo&quot;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;video</span> eq <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> 
            send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #483d8b;">&quot;Erreur : Vidéo invalide ou introuvable&quot;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> title <span style="color: black;">&#91;</span>clean_title <span style="color: black;">&#91;</span>dict get <span style="color: #ff3333;">&#36;video</span> snippet title<span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> channel_title <span style="color: black;">&#91;</span>clean_title <span style="color: black;">&#91;</span>dict get <span style="color: #ff3333;">&#36;video</span> snippet channelTitle<span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> raw_duration <span style="color: black;">&#91;</span>dict get <span style="color: #ff3333;">&#36;video</span> contentDetails duration<span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> duration <span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">expr</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;raw_duration</span> eq <span style="color: #483d8b;">&quot;P0D&quot;</span> <span style="color: #66cc66;">?</span> <span style="color: #483d8b;">&quot;Live&quot;</span> : <span style="color: black;">&#91;</span>format_duration <span style="color: #ff3333;">&#36;raw_duration</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> views <span style="color: black;">&#91;</span>format_views <span style="color: black;">&#91;</span>dict get <span style="color: #ff3333;">&#36;video</span> statistics viewCount<span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> published_at <span style="color: black;">&#91;</span>format_published_date <span style="color: black;">&#91;</span>dict get <span style="color: #ff3333;">&#36;video</span> snippet publishedAt<span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> video_link <span style="color: #483d8b;">&quot;https://youtu.be/&#36;id&quot;</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Initialisation</span>
    init
<span style="color: black;">&#125;</span></pre></code></div></div><br /><br />
]]></description>
			<content:encoded><![CDATA[salut la  communauté ,<br />
vais vous proposer un petit travail assisté par une ia , vous pouvez s'en servir ou ça nous sert pour discuter et à le développer aussi<br />
<br />
<div class="codeblock"><div class="title">tcl<button class="copy">copier</button></div><div class="body"><code><pre class="tcl" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># -----------------------------------------------------------------------------</span>
<span style="color: #808080; font-style: italic;"># Script YouTube pour Eggdrop Bot IRC</span>
<span style="color: #808080; font-style: italic;"># Version : 1.1.16</span>
<span style="color: #808080; font-style: italic;"># Description : Ce script permet d'intégrer des fonctionnalités YouTube dans un bot IRC.</span>
<span style="color: #808080; font-style: italic;">#               Il permet de rechercher des vidéos YouTube, de détecter automatiquement</span>
<span style="color: #808080; font-style: italic;">#               les liens YouTube partagés dans le chat, et d'afficher des informations</span>
<span style="color: #808080; font-style: italic;">#               détaillées sur les vidéos.</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># Prérequis :</span>
<span style="color: #808080; font-style: italic;"># - Tcl 8.6 ou supérieur</span>
<span style="color: #808080; font-style: italic;"># - Packages Tcl : http, json, tls</span>
<span style="color: #808080; font-style: italic;"># - Clé API YouTube valide (à configurer par l'utilisateur)</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># Commandes :</span>
<span style="color: #808080; font-style: italic;"># - !yt &lt;terme&gt; : Recherche une vidéo YouTube basée sur le terme de recherche fourni.</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># Fonctionnalités :</span>
<span style="color: #808080; font-style: italic;"># - Détection automatique des liens YouTube et affichage des détails des vidéos.</span>
<span style="color: #808080; font-style: italic;"># - Mise en cache des résultats de recherche pour optimiser les appels API.</span>
<span style="color: #808080; font-style: italic;"># - Formatage des messages pour une présentation claire des informations.</span>
<span style="color: #808080; font-style: italic;"># -----------------------------------------------------------------------------</span>
<span style="color: #808080; font-style: italic;">
# ---------------------------------------------------------------------</span>
<span style="color: #808080; font-style: italic;"># Configuration Utilisateur</span>
<span style="color: #808080; font-style: italic;"># ---------------------------------------------------------------------</span>
<span style="color: #808080; font-style: italic;"># Veuillez entrer votre clé API YouTube ci-dessous</span>
<span style="color: #ff7700;font-weight:bold;">namespace</span> <span style="color: #ff7700;font-weight:bold;">eval</span> ::<span style="color: black;">youtube</span> <span style="color: black;">&#123;</span><span style="color: #808080; font-style: italic;">
    # Clé API YouTube (à configurer par l'utilisateur)</span>
    <span style="color: #ff7700;font-weight:bold;">variable</span> api_key <span style="color: #483d8b;">&quot;VOTRE_CLE_ICI&quot;</span>
<span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
# ---------------------------------------------------------------------</span>
<span style="color: #808080; font-style: italic;"># Script Principal (Ne modifiez rien ci-dessous)</span>
<span style="color: #808080; font-style: italic;"># ---------------------------------------------------------------------</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">namespace</span> <span style="color: #ff7700;font-weight:bold;">eval</span> ::<span style="color: black;">youtube</span> <span style="color: black;">&#123;</span><span style="color: #808080; font-style: italic;">
    # Version du script</span>
    <span style="color: #ff7700;font-weight:bold;">variable</span> script_version <span style="color: #483d8b;">&quot;1.1.16&quot;</span>
<span style="color: #808080; font-style: italic;">    # Préfixe pour les messages YouTube</span>
    <span style="color: #ff7700;font-weight:bold;">variable</span> yt_prefix <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;0</span>0301,00You<span style="color: #000099; font-weight: bold;">&#092;0</span>0300,04Tube<span style="color: #000099; font-weight: bold;">&#092;0</span>17&quot;</span>
<span style="color: #808080; font-style: italic;">    # Cache pour stocker les résultats de recherche</span>
    <span style="color: #ff7700;font-weight:bold;">variable</span> cache
<span style="color: #808080; font-style: italic;">    # Cache pour stocker les résultats automatiques</span>
    <span style="color: #ff7700;font-weight:bold;">variable</span> auto_cache
<span style="color: #808080; font-style: italic;">
    # S'assurer que la version de Tcl est 8.6 ou supérieure pour le support Unicode</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">catch</span> <span style="color: black;">&#123;</span><span style="color: #008000;">package</span> require Tcl <span style="color: #ff4500;">8.6</span><span style="color: black;">&#125;</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        putlog <span style="color: #483d8b;">&quot;Attention : Tcl &lt; 8.6 détecté - Unicode limité&quot;</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Procédure d'initialisation</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> init <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span><span style="color: #808080; font-style: italic;">
        # Packages requis</span>
        <span style="color: #ff7700;font-weight:bold;">foreach</span> pkg <span style="color: black;">&#123;</span><span style="color: #008000;">http</span> json tls<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">catch</span> <span style="color: black;">&#123;</span><span style="color: #008000;">package</span> require <span style="color: #ff3333;">&#36;pkg</span><span style="color: black;">&#125;</span> err<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
                <span style="color: #ff7700;font-weight:bold;">error</span> <span style="color: #483d8b;">&quot;Package requis manquant : &#36;pkg&quot;</span>
            <span style="color: black;">&#125;</span>
        <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">        # Initialiser les caches</span>
        array <span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">cache</span> <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>
        array <span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">auto_cache</span> <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">        # Définir le flag YouTube s'il n'est pas déjà défini</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span><span style="color: #008000;">info</span> exists ::<span style="color: black;">youtube_flag_defined</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            setudef flag youtube
            <span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">youtube_flag_defined</span> <span style="color: #ff4500;">1</span>
        <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">        # Lier les commandes à leurs procédures respectives</span>
        bind pub - <span style="color: #483d8b;">&quot;!yt&quot;</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">pub</span>:youtube
        bind pubm - <span style="color: #483d8b;">&quot;*youtube*&quot;</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">pubm</span>:youtube_auto
        bind pubm - <span style="color: #483d8b;">&quot;*youtu.be*&quot;</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">pubm</span>:youtube_auto
<span style="color: #808080; font-style: italic;">        
        # Message de confirmation du chargement du script</span>
        putlog <span style="color: #483d8b;">&quot;Script YouTube version &#36;::youtube::script_version chargé. Pour l'activer, utilisez la commande : .chanset #channel +youtube&quot;</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Procédure pour envoyer un message YouTube</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> send_youtube_message <span style="color: black;">&#123;</span>target message <span style="color: black;">&#123;</span>type <span style="color: #483d8b;">&quot;PRIVMSG&quot;</span><span style="color: black;">&#125;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #ff7700;font-weight:bold;">variable</span> yt_prefix
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;type</span> eq <span style="color: #483d8b;">&quot;PRIVMSG&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            puthelp <span style="color: #483d8b;">&quot;PRIVMSG &#36;target :&#36;{yt_prefix}<span style="color: #000099; font-weight: bold;">&#092;0</span>03 &#36;message&quot;</span>
        <span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">elseif</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;type</span> eq <span style="color: #483d8b;">&quot;NOTICE&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            puthelp <span style="color: #483d8b;">&quot;NOTICE &#36;target :&#36;message<span style="color: #000099; font-weight: bold;">&#092;0</span>03&quot;</span>
        <span style="color: black;">&#125;</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Procédure pour vérifier si YouTube est activé pour un canal</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> check_youtube_enabled <span style="color: black;">&#123;</span>chan <span style="color: black;">&#123;</span>silent <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> enabled <span style="color: black;">&#91;</span>channel get <span style="color: #ff3333;">&#36;chan</span> youtube<span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: #ff3333;">&#36;enabled</span> <span style="color: #66cc66;">&amp;&amp;</span> <span style="color: #66cc66;">!</span><span style="color: #ff3333;">&#36;silent</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #483d8b;">&quot;Erreur : YouTube non activé (activer via DCC chat)&quot;</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff3333;">&#36;enabled</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Gestionnaire pour la commande !yt</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> pub:youtube <span style="color: black;">&#123;</span>nick host hand chan arg<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #ff7700;font-weight:bold;">variable</span> cache
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span>check_youtube_enabled <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> query <span style="color: black;">&#91;</span><span style="color: #008000;">string</span> trim <span style="color: #ff3333;">&#36;arg</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;query</span> eq <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #483d8b;">&quot;Utilisation : !yt &lt;terme&gt;&quot;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">info</span> exists cache<span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;query</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #ff3333;">&#36;cache</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;query</span><span style="color: black;">&#41;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">title</span> title
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">video_id</span> video_id
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">catch</span> <span style="color: black;">&#123;</span>search_youtube <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;chan</span> <span style="color: #ff3333;">&#36;query</span><span style="color: black;">&#125;</span> err<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #483d8b;">&quot;Erreur : &#36;err&quot;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">channel_title</span> channel_title
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">duration</span> duration
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">views</span> views
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">published_at</span> published_at
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">video_link</span> video_link
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">catch</span> <span style="color: black;">&#123;</span>process_youtube_url <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;chan</span> <span style="color: #ff3333;">&#36;video_id</span> <span style="color: #ff3333;">&#36;query</span><span style="color: black;">&#125;</span> err<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #483d8b;">&quot;Erreur lors de la récupération des détails : &#36;err&quot;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> message <span style="color: black;">&#91;</span>format_yt_message <span style="color: black;">&#91;</span><span style="color: #008000;">list</span> <span style="color: #ff3333;">&#36;title</span> <span style="color: #ff3333;">&#36;channel_title</span> <span style="color: #ff3333;">&#36;duration</span> <span style="color: #ff3333;">&#36;views</span> <span style="color: #ff3333;">&#36;published_at</span> <span style="color: #ff3333;">&#36;video_link</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> cache<span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;query</span><span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;message</span>
        utimer <span style="color: #ff4500;">300</span> <span style="color: black;">&#91;</span><span style="color: #008000;">list</span> unset ::<span style="color: black;">youtube</span>::<span style="color: black;">cache</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;query</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
        send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #ff3333;">&#36;message</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Gestionnaire pour la détection automatique des liens YouTube dans les messages</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> pubm:youtube_auto <span style="color: black;">&#123;</span>nick host hand chan text<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #ff7700;font-weight:bold;">variable</span> auto_cache
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span>check_youtube_enabled <span style="color: #ff3333;">&#36;chan</span> <span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">string</span> match <span style="color: #483d8b;">&quot;!yt*&quot;</span> <span style="color: #ff3333;">&#36;text</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> youtube_pattern <span style="color: black;">&#123;</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">?</span>:https<span style="color: #66cc66;">?</span>://<span style="color: black;">&#41;</span><span style="color: #66cc66;">?</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">?</span>:www&#092;.|m&#092;.<span style="color: black;">&#41;</span><span style="color: #66cc66;">?</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">?</span>:youtube&#092;.com/<span style="color: black;">&#40;</span><span style="color: #66cc66;">?</span>:watch&#092;<span style="color: #66cc66;">?</span>v=|shorts/|embed/|live/<span style="color: black;">&#41;</span>|youtu&#092;.be/<span style="color: black;">&#41;</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span>^<span style="color: #66cc66;">&amp;</span>&#092;s&#092;<span style="color: #66cc66;">?</span><span style="color: black;">&#93;</span>+<span style="color: black;">&#41;</span><span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> music_pattern <span style="color: black;">&#123;</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">?</span>:https<span style="color: #66cc66;">?</span>://<span style="color: black;">&#41;</span><span style="color: #66cc66;">?</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">?</span>:www&#092;.|m&#092;.<span style="color: black;">&#41;</span><span style="color: #66cc66;">?</span>music&#092;.youtube&#092;.com/watch&#092;<span style="color: #66cc66;">?</span>v=<span style="color: black;">&#40;</span><span style="color: black;">&#91;</span>^<span style="color: #66cc66;">&amp;</span>&#092;s&#092;<span style="color: #66cc66;">?</span><span style="color: black;">&#93;</span>+<span style="color: black;">&#41;</span><span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span><span style="color: #008000;">regexp</span> <span style="color: #ff3333;">&#36;youtube_pattern</span> <span style="color: #ff3333;">&#36;text</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">&amp;&amp;</span> <span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span><span style="color: #008000;">regexp</span> <span style="color: #ff3333;">&#36;music_pattern</span> <span style="color: #ff3333;">&#36;text</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#125;</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">set</span> ids <span style="color: black;">&#91;</span><span style="color: #008000;">regexp</span> -all -inline <span style="color: #ff3333;">&#36;youtube_pattern</span> <span style="color: #ff3333;">&#36;text</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> music_ids <span style="color: black;">&#91;</span><span style="color: #008000;">regexp</span> -all -inline <span style="color: #ff3333;">&#36;music_pattern</span> <span style="color: #ff3333;">&#36;text</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">foreach</span> <span style="color: black;">&#123;</span>match id<span style="color: black;">&#125;</span> <span style="color: #ff3333;">&#36;ids</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">info</span> exists auto_cache<span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;id</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
                send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #ff3333;">&#36;auto_cache</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;id</span><span style="color: black;">&#41;</span>
                <span style="color: #ff7700;font-weight:bold;">continue</span>
            <span style="color: black;">&#125;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">catch</span> <span style="color: black;">&#123;</span>process_youtube_url <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;chan</span> <span style="color: #ff3333;">&#36;id</span> <span style="color: #ff3333;">&#36;text</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span> err<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
                <span style="color: #ff7700;font-weight:bold;">continue</span>
            <span style="color: black;">&#125;</span>
            <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">title</span> title
            <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">channel_title</span> channel_title
            <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">duration</span> duration
            <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">views</span> views
            <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">published_at</span> published_at
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;title</span> eq <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
                <span style="color: #ff7700;font-weight:bold;">continue</span>
            <span style="color: black;">&#125;</span>
            <span style="color: #ff7700;font-weight:bold;">set</span> message <span style="color: black;">&#91;</span>format_yt_message <span style="color: black;">&#91;</span><span style="color: #008000;">list</span> <span style="color: #ff3333;">&#36;title</span> <span style="color: #ff3333;">&#36;channel_title</span> <span style="color: #ff3333;">&#36;duration</span> <span style="color: #ff3333;">&#36;views</span> <span style="color: #ff3333;">&#36;published_at</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
            <span style="color: #ff7700;font-weight:bold;">set</span> auto_cache<span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;id</span><span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;message</span>
            utimer <span style="color: #ff4500;">300</span> <span style="color: black;">&#91;</span><span style="color: #008000;">list</span> unset ::<span style="color: black;">youtube</span>::<span style="color: black;">auto_cache</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;id</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
            send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #ff3333;">&#36;message</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">foreach</span> <span style="color: black;">&#123;</span>match music_id<span style="color: black;">&#125;</span> <span style="color: #ff3333;">&#36;music_ids</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">info</span> exists auto_cache<span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;music_id</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
                send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #ff3333;">&#36;auto_cache</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;music_id</span><span style="color: black;">&#41;</span>
                <span style="color: #ff7700;font-weight:bold;">continue</span>
            <span style="color: black;">&#125;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">catch</span> <span style="color: black;">&#123;</span>process_youtube_url <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;chan</span> <span style="color: #ff3333;">&#36;music_id</span> <span style="color: #ff3333;">&#36;text</span> <span style="color: #483d8b;">&quot;music&quot;</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span> err<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
                <span style="color: #ff7700;font-weight:bold;">continue</span>
            <span style="color: black;">&#125;</span>
            <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">title</span> title
            <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">channel_title</span> channel_title
            <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">duration</span> duration
            <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">views</span> views
            <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">published_at</span> published_at
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;title</span> eq <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
                <span style="color: #ff7700;font-weight:bold;">continue</span>
            <span style="color: black;">&#125;</span>
            <span style="color: #ff7700;font-weight:bold;">set</span> message <span style="color: black;">&#91;</span>format_yt_message <span style="color: black;">&#91;</span><span style="color: #008000;">list</span> <span style="color: #ff3333;">&#36;title</span> <span style="color: #ff3333;">&#36;channel_title</span> <span style="color: #ff3333;">&#36;duration</span> <span style="color: #ff3333;">&#36;views</span> <span style="color: #ff3333;">&#36;published_at</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
            <span style="color: #ff7700;font-weight:bold;">set</span> auto_cache<span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;music_id</span><span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;message</span>
            utimer <span style="color: #ff4500;">300</span> <span style="color: black;">&#91;</span><span style="color: #008000;">list</span> unset ::<span style="color: black;">youtube</span>::<span style="color: black;">auto_cache</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;music_id</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
            send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #ff3333;">&#36;message</span>
        <span style="color: black;">&#125;</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Procédure pour encoder une requête URL</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> url_encode <span style="color: black;">&#123;</span>query<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> encoded <span style="color: #483d8b;">&quot;&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">foreach</span> char <span style="color: black;">&#91;</span><span style="color: #008000;">split</span> <span style="color: #ff3333;">&#36;query</span> <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#93;</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">regexp</span> <span style="color: black;">&#123;</span>^<span style="color: black;">&#91;</span>a-zA-Z0-<span style="color: #ff4500;">9</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">&#36;</span><span style="color: black;">&#125;</span> <span style="color: #ff3333;">&#36;char</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
                <span style="color: #008000;">append</span> encoded <span style="color: #ff3333;">&#36;char</span>
            <span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">else</span> <span style="color: black;">&#123;</span>
                <span style="color: #008000;">scan</span> <span style="color: #ff3333;">&#36;char</span> <span style="color: #66cc66;">%</span>c code
                <span style="color: #008000;">append</span> encoded <span style="color: black;">&#91;</span><span style="color: #008000;">format</span> <span style="color: #483d8b;">&quot;%%%02X&quot;</span> <span style="color: #ff3333;">&#36;code</span><span style="color: black;">&#93;</span>
            <span style="color: black;">&#125;</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff3333;">&#36;encoded</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Procédure pour nettoyer et formater les titres des vidéos</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> clean_title <span style="color: black;">&#123;</span>title <span style="color: black;">&#123;</span>keep_emojis <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> cleaned <span style="color: #ff3333;">&#36;title</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: #ff3333;">&#36;keep_emojis</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">set</span> cleaned <span style="color: black;">&#91;</span><span style="color: #008000;">string</span> map <span style="color: black;">&#123;</span>
                <span style="color: #483d8b;">&quot;í ¼í·©í ¼í·¿&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;í ¼í·²í ¼í·¦&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;í ¼í·¨&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;í ¼í·§&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> 
                <span style="color: #483d8b;">&quot;í ¼í·ª&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;í ¼í·«&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;í ¼í·¬&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;í ¼í·­&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> 
                <span style="color: #483d8b;">&quot;í ¼í·®&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;í ¼í·¯&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;í ¼í·°&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;í ¼í·±&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> 
                <span style="color: #483d8b;">&quot;í ¼í¸&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;í ¼í¹&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;í ¼íº&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;í ¼í»&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> 
                <span style="color: #483d8b;">&quot;í&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;¼&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;ÿ&quot;</span> <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">&#092;n</span>&quot;</span> <span style="color: #483d8b;">&quot; &quot;</span>
            <span style="color: black;">&#125;</span> <span style="color: #ff3333;">&#36;cleaned</span><span style="color: black;">&#93;</span>
            <span style="color: #008000;">regsub</span> -all <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span>^<span style="color: black;">&#91;</span>:alnum:<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>:space:<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>:punct:<span style="color: black;">&#93;</span>&#092;u4e00-&#092;u9FFF<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: #ff3333;">&#36;cleaned</span> <span style="color: #483d8b;">&quot;&quot;</span> cleaned
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#91;</span><span style="color: #008000;">string</span> trim <span style="color: #ff3333;">&#36;cleaned</span><span style="color: black;">&#93;</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Procédure pour récupérer les données YouTube avec des tentatives répétées</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> fetch_youtube_data <span style="color: black;">&#123;</span>url chan<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #ff7700;font-weight:bold;">catch</span> <span style="color: black;">&#123;</span><span style="color: #008000;">package</span> require tls<span style="color: black;">&#125;</span>
        ::<span style="color: #008000;">http</span>::<span style="color: black;">register</span> https <span style="color: #ff4500;">443</span> <span style="color: black;">&#91;</span><span style="color: #008000;">list</span> ::<span style="color: black;">tls</span>::<span style="color: #008000;">socket</span> -tls1 <span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> token <span style="color: #483d8b;">&quot;&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">for</span> <span style="color: black;">&#123;</span><span style="color: #ff7700;font-weight:bold;">set</span> i <span style="color: #ff4500;">1</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;i</span> <span style="color: #66cc66;">&lt;</span>= <span style="color: #ff4500;">5</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span><span style="color: #008000;">incr</span> i<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">catch</span> <span style="color: black;">&#123;</span><span style="color: #ff7700;font-weight:bold;">set</span> token <span style="color: black;">&#91;</span>::<span style="color: #008000;">http</span>::<span style="color: black;">geturl</span> <span style="color: #ff3333;">&#36;url</span> -timeout <span style="color: #ff4500;">5000</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> err<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
                <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;i</span> == <span style="color: #ff4500;">5</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
                    ::<span style="color: #008000;">http</span>::<span style="color: black;">unregister</span> https
                    send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #483d8b;">&quot;Erreur HTTP après 5 tentatives : &#36;err&quot;</span>
                    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;&quot;</span>
                <span style="color: black;">&#125;</span>
                after <span style="color: #ff4500;">1000</span>
                <span style="color: #ff7700;font-weight:bold;">continue</span>
            <span style="color: black;">&#125;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span>::<span style="color: #008000;">http</span>::<span style="color: black;">status</span> <span style="color: #ff3333;">&#36;token</span><span style="color: black;">&#93;</span> eq <span style="color: #483d8b;">&quot;ok&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">break</span> <span style="color: black;">&#125;</span>
            <span style="color: #ff7700;font-weight:bold;">set</span> err_msg <span style="color: black;">&#91;</span>::<span style="color: #008000;">http</span>::<span style="color: #ff7700;font-weight:bold;">error</span> <span style="color: #ff3333;">&#36;token</span><span style="color: black;">&#93;</span>
            <span style="color: #ff7700;font-weight:bold;">switch</span> -exact <span style="color: black;">&#91;</span>::<span style="color: #008000;">http</span>::<span style="color: black;">ncode</span> <span style="color: #ff3333;">&#36;token</span><span style="color: black;">&#93;</span> <span style="color: black;">&#123;</span>
                <span style="color: #ff4500;">429</span> <span style="color: black;">&#123;</span>
                    send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #483d8b;">&quot;Erreur : Limite de requêtes atteinte, réessayez plus tard.&quot;</span>
                    ::<span style="color: #008000;">http</span>::<span style="color: black;">cleanup</span> <span style="color: #ff3333;">&#36;token</span>
                    ::<span style="color: #008000;">http</span>::<span style="color: black;">unregister</span> https
                    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;&quot;</span>
                <span style="color: black;">&#125;</span>
                <span style="color: #ff4500;">403</span> <span style="color: black;">&#123;</span>
                    <span style="color: #ff7700;font-weight:bold;">set</span> raw_response <span style="color: black;">&#91;</span>::<span style="color: #008000;">http</span>::<span style="color: black;">data</span> <span style="color: #ff3333;">&#36;token</span><span style="color: black;">&#93;</span>
                    putlog <span style="color: #483d8b;">&quot;Erreur YouTube API (HTTP 403): &#36;raw_response&quot;</span>
                    ::<span style="color: #008000;">http</span>::<span style="color: black;">cleanup</span> <span style="color: #ff3333;">&#36;token</span>
                    ::<span style="color: #008000;">http</span>::<span style="color: black;">unregister</span> https
                    send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #483d8b;">&quot;Erreur : Vidéo privée ou restrictions activées.&quot;</span>
                    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;&quot;</span>
                <span style="color: black;">&#125;</span>
                <span style="color: #ff4500;">404</span> <span style="color: black;">&#123;</span>
                    <span style="color: #ff7700;font-weight:bold;">set</span> raw_response <span style="color: black;">&#91;</span>::<span style="color: #008000;">http</span>::<span style="color: black;">data</span> <span style="color: #ff3333;">&#36;token</span><span style="color: black;">&#93;</span>
                    putlog <span style="color: #483d8b;">&quot;Erreur YouTube API (HTTP 404): &#36;raw_response&quot;</span>
                    ::<span style="color: #008000;">http</span>::<span style="color: black;">cleanup</span> <span style="color: #ff3333;">&#36;token</span>
                    ::<span style="color: #008000;">http</span>::<span style="color: black;">unregister</span> https
                    send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #483d8b;">&quot;Erreur : Vidéo supprimée ou introuvable.&quot;</span>
                    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;&quot;</span>
                <span style="color: black;">&#125;</span>
            <span style="color: black;">&#125;</span>
            ::<span style="color: #008000;">http</span>::<span style="color: black;">cleanup</span> <span style="color: #ff3333;">&#36;token</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;i</span> == <span style="color: #ff4500;">5</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
                ::<span style="color: #008000;">http</span>::<span style="color: black;">unregister</span> https
                send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #483d8b;">&quot;Erreur HTTP après 5 tentatives : &#36;err_msg&quot;</span>
                <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;&quot;</span>
            <span style="color: black;">&#125;</span>
            after <span style="color: #ff4500;">1000</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> data <span style="color: black;">&#91;</span>::<span style="color: #008000;">http</span>::<span style="color: black;">data</span> <span style="color: #ff3333;">&#36;token</span><span style="color: black;">&#93;</span>
        ::<span style="color: #008000;">http</span>::<span style="color: black;">cleanup</span> <span style="color: #ff3333;">&#36;token</span>
        ::<span style="color: #008000;">http</span>::<span style="color: black;">unregister</span> https
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">string</span> trim <span style="color: #ff3333;">&#36;data</span><span style="color: black;">&#93;</span> eq <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #483d8b;">&quot;Erreur : Réponse vide de l’API&quot;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;&quot;</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">catch</span> <span style="color: black;">&#123;</span><span style="color: #ff7700;font-weight:bold;">set</span> json_data <span style="color: black;">&#91;</span>::<span style="color: black;">json</span>::<span style="color: black;">json2dict</span> <span style="color: #ff3333;">&#36;data</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> err<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #483d8b;">&quot;Erreur JSON : &#36;err&quot;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;&quot;</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff3333;">&#36;json_data</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Procédure pour récupérer les données de chaîne depuis l'API YouTube</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> fetch_channel_data <span style="color: black;">&#123;</span>url chan type<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> json_data <span style="color: black;">&#91;</span>fetch_youtube_data <span style="color: #ff3333;">&#36;url</span> <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;json_data</span> eq <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;&quot;</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span>dict exists <span style="color: #ff3333;">&#36;json_data</span> items<span style="color: black;">&#93;</span> || <span style="color: black;">&#91;</span><span style="color: #008000;">llength</span> <span style="color: black;">&#91;</span>dict get <span style="color: #ff3333;">&#36;json_data</span> items<span style="color: black;">&#93;</span><span style="color: black;">&#93;</span> == <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;&quot;</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#91;</span><span style="color: #008000;">lindex</span> <span style="color: black;">&#91;</span>dict get <span style="color: #ff3333;">&#36;json_data</span> items<span style="color: black;">&#93;</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Procédure pour formater un message YouTube</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> format_yt_message <span style="color: black;">&#123;</span>parts <span style="color: black;">&#123;</span>separator <span style="color: #483d8b;">&quot;|&quot;</span><span style="color: black;">&#125;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> message <span style="color: #483d8b;">&quot;&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> first <span style="color: #ff4500;">1</span>
        <span style="color: #ff7700;font-weight:bold;">foreach</span> part <span style="color: #ff3333;">&#36;parts</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;first</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
                <span style="color: #008000;">append</span> message <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;part<span style="color: #000099; font-weight: bold;">&#092;0</span>02 &quot;</span>
                <span style="color: #ff7700;font-weight:bold;">set</span> first <span style="color: #ff4500;">0</span>
            <span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">else</span> <span style="color: black;">&#123;</span>
                <span style="color: #008000;">append</span> message <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">&#092;0</span>0304&#36;{separator}<span style="color: #000099; font-weight: bold;">&#092;0</span>03 &#36;part&quot;</span>
            <span style="color: black;">&#125;</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #008000;">append</span> message <span style="color: #483d8b;">&quot; <span style="color: #000099; font-weight: bold;">&#092;0</span>0304&#36;{separator}<span style="color: #000099; font-weight: bold;">&#092;0</span>03&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#91;</span><span style="color: #008000;">string</span> trim <span style="color: #ff3333;">&#36;message</span><span style="color: black;">&#93;</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Procédure pour rechercher des vidéos YouTube</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> search_youtube <span style="color: black;">&#123;</span>nick chan query<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #ff7700;font-weight:bold;">variable</span> api_key
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">title</span> title
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">video_id</span> video_id
        <span style="color: #ff7700;font-weight:bold;">set</span> formatted_query <span style="color: black;">&#91;</span>url_encode <span style="color: #ff3333;">&#36;query</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> url <span style="color: #483d8b;">&quot;https://www.googleapis.com/youtube/v3/search?part=snippet&amp;q=&#36;formatted_query&amp;type=video&amp;key=&#36;api_key&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> json_data <span style="color: black;">&#91;</span>fetch_youtube_data <span style="color: #ff3333;">&#36;url</span> <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;json_data</span> eq <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> 
            <span style="color: #ff7700;font-weight:bold;">error</span> <span style="color: #483d8b;">&quot;Échec de la recherche&quot;</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> video <span style="color: black;">&#91;</span><span style="color: #008000;">lindex</span> <span style="color: black;">&#91;</span>dict get <span style="color: #ff3333;">&#36;json_data</span> items<span style="color: black;">&#93;</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span>dict exists <span style="color: #ff3333;">&#36;video</span> id<span style="color: black;">&#93;</span> || <span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span>dict exists <span style="color: #ff3333;">&#36;video</span> snippet<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> 
            <span style="color: #ff7700;font-weight:bold;">error</span> <span style="color: #483d8b;">&quot;Aucune vidéo trouvée pour cette recherche&quot;</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> id_dict <span style="color: black;">&#91;</span>dict get <span style="color: #ff3333;">&#36;video</span> id<span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> snippet_dict <span style="color: black;">&#91;</span>dict get <span style="color: #ff3333;">&#36;video</span> snippet<span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span>dict exists <span style="color: #ff3333;">&#36;id_dict</span> videoId<span style="color: black;">&#93;</span> || <span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span>dict exists <span style="color: #ff3333;">&#36;snippet_dict</span> title<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> 
            <span style="color: #ff7700;font-weight:bold;">error</span> <span style="color: #483d8b;">&quot;ID ou titre manquant&quot;</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> title <span style="color: black;">&#91;</span>clean_title <span style="color: black;">&#91;</span>dict get <span style="color: #ff3333;">&#36;snippet_dict</span> title<span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> video_id <span style="color: black;">&#91;</span>dict get <span style="color: #ff3333;">&#36;id_dict</span> videoId<span style="color: black;">&#93;</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Procédure pour formater la durée d'une vidéo</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> format_duration <span style="color: black;">&#123;</span>duration<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;duration</span> eq <span style="color: #483d8b;">&quot;P0D&quot;</span> || <span style="color: #ff3333;">&#36;duration</span> eq <span style="color: #483d8b;">&quot;PT0S&quot;</span> || <span style="color: #ff3333;">&#36;duration</span> eq <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;Live&quot;</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span><span style="color: #008000;">regexp</span> <span style="color: black;">&#123;</span>PT<span style="color: black;">&#40;</span><span style="color: #66cc66;">?</span>:<span style="color: black;">&#40;</span>&#092;d+<span style="color: black;">&#41;</span>H<span style="color: black;">&#41;</span><span style="color: #66cc66;">?</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">?</span>:<span style="color: black;">&#40;</span>&#092;d+<span style="color: black;">&#41;</span>M<span style="color: black;">&#41;</span><span style="color: #66cc66;">?</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">?</span>:<span style="color: black;">&#40;</span>&#092;d+<span style="color: black;">&#41;</span>S<span style="color: black;">&#41;</span><span style="color: #66cc66;">?</span><span style="color: black;">&#125;</span> <span style="color: #ff3333;">&#36;duration</span> _ hours minutes seconds<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;En cours de traitement&quot;</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> hours <span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">expr</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;hours</span> ne <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #66cc66;">?</span> <span style="color: #ff3333;">&#36;hours</span> : <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> minutes <span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">expr</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;minutes</span> ne <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #66cc66;">?</span> <span style="color: #ff3333;">&#36;minutes</span> : <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> seconds <span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">expr</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;seconds</span> ne <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #66cc66;">?</span> <span style="color: #ff3333;">&#36;seconds</span> : <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;hours</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;&#36;{hours}h &#36;{minutes}mn &#36;{seconds}s&quot;</span> <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;minutes</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;&#36;{minutes}mn &#36;{seconds}s&quot;</span> <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;&#36;{seconds}s&quot;</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Procédure pour formater le nombre de vues d'une vidéo</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> format_views <span style="color: black;">&#123;</span>views<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span><span style="color: #008000;">string</span> is integer -strict <span style="color: #ff3333;">&#36;views</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;N/A&quot;</span> <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;views</span> <span style="color: #66cc66;">&gt;</span>= <span style="color: #ff4500;">1000000</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#91;</span><span style="color: #008000;">format</span> <span style="color: #483d8b;">&quot;%.1fM&quot;</span> <span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">expr</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;views</span> / <span style="color: #ff4500;">1000000.0</span><span style="color: black;">&#125;</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span> <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;views</span> <span style="color: #66cc66;">&gt;</span>= <span style="color: #ff4500;">1000</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#91;</span><span style="color: #008000;">format</span> <span style="color: #483d8b;">&quot;%.1fK&quot;</span> <span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">expr</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;views</span> / <span style="color: #ff4500;">1000.0</span><span style="color: black;">&#125;</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span> <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff3333;">&#36;views</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Procédure pour formater la date de publication</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> format_published_date <span style="color: black;">&#123;</span>published_at<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #008000;">regsub</span> <span style="color: black;">&#123;</span>&#092;.&#092;d+Z<span style="color: #66cc66;">&#36;</span><span style="color: black;">&#125;</span> <span style="color: #ff3333;">&#36;published_at</span> <span style="color: #483d8b;">&quot;Z&quot;</span> clean_date
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">catch</span> <span style="color: black;">&#123;</span><span style="color: #ff7700;font-weight:bold;">set</span> timestamp <span style="color: black;">&#91;</span><span style="color: #008000;">clock</span> <span style="color: #008000;">scan</span> <span style="color: #ff3333;">&#36;clean_date</span> -<span style="color: #008000;">format</span> <span style="color: #483d8b;">&quot;%Y-%m-%dT%H:%M:%SZ&quot;</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> err<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;Date inconnue&quot;</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#91;</span><span style="color: #008000;">clock</span> <span style="color: #008000;">format</span> <span style="color: #ff3333;">&#36;timestamp</span> -<span style="color: #008000;">format</span> <span style="color: #483d8b;">&quot;%d-%m-%Y&quot;</span><span style="color: black;">&#93;</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Procédure pour traiter l'URL d'une vidéo YouTube</span>
    <span style="color: #ff7700;font-weight:bold;">proc</span> process_youtube_url <span style="color: black;">&#123;</span>nick chan id text <span style="color: black;">&#123;</span><span style="color: #008000;">source</span> <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>include_link <span style="color: #ff4500;">1</span><span style="color: black;">&#125;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
        <span style="color: #ff7700;font-weight:bold;">variable</span> api_key
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">title</span> title
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">channel_title</span> channel_title
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">duration</span> duration
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">views</span> views
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">published_at</span> published_at
        <span style="color: #ff7700;font-weight:bold;">upvar</span> #<span style="color: #ff4500;">0</span> ::<span style="color: black;">youtube</span>::<span style="color: black;">video_link</span> video_link
        <span style="color: #ff7700;font-weight:bold;">set</span> title <span style="color: #483d8b;">&quot;&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> channel_title <span style="color: #483d8b;">&quot;&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> duration <span style="color: #483d8b;">&quot;&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> views <span style="color: #483d8b;">&quot;&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> published_at <span style="color: #483d8b;">&quot;&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> video_link <span style="color: #483d8b;">&quot;&quot;</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">set</span> url <span style="color: #483d8b;">&quot;https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails,statistics&amp;id=&#36;id&amp;key=&#36;api_key&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> video <span style="color: black;">&#91;</span>fetch_channel_data <span style="color: #ff3333;">&#36;url</span> <span style="color: #ff3333;">&#36;chan</span> <span style="color: #483d8b;">&quot;Vidéo&quot;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;video</span> eq <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> 
            send_youtube_message <span style="color: #ff3333;">&#36;chan</span> <span style="color: #483d8b;">&quot;Erreur : Vidéo invalide ou introuvable&quot;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span>
        <span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> title <span style="color: black;">&#91;</span>clean_title <span style="color: black;">&#91;</span>dict get <span style="color: #ff3333;">&#36;video</span> snippet title<span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> channel_title <span style="color: black;">&#91;</span>clean_title <span style="color: black;">&#91;</span>dict get <span style="color: #ff3333;">&#36;video</span> snippet channelTitle<span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> raw_duration <span style="color: black;">&#91;</span>dict get <span style="color: #ff3333;">&#36;video</span> contentDetails duration<span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> duration <span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">expr</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;raw_duration</span> eq <span style="color: #483d8b;">&quot;P0D&quot;</span> <span style="color: #66cc66;">?</span> <span style="color: #483d8b;">&quot;Live&quot;</span> : <span style="color: black;">&#91;</span>format_duration <span style="color: #ff3333;">&#36;raw_duration</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> views <span style="color: black;">&#91;</span>format_views <span style="color: black;">&#91;</span>dict get <span style="color: #ff3333;">&#36;video</span> statistics viewCount<span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> published_at <span style="color: black;">&#91;</span>format_published_date <span style="color: black;">&#91;</span>dict get <span style="color: #ff3333;">&#36;video</span> snippet publishedAt<span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">set</span> video_link <span style="color: #483d8b;">&quot;https://youtu.be/&#36;id&quot;</span>
    <span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
    # Initialisation</span>
    init
<span style="color: black;">&#125;</span></pre></code></div></div><br /><br />
]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[erreur dans tcl]]></title>
			<link>https://forum.eggdrop.fr/showthread.php?tid=1808</link>
			<pubDate>Mon, 23 Dec 2024 04:10:37 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.eggdrop.fr/member.php?action=profile&uid=3928">dino</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.eggdrop.fr/showthread.php?tid=1808</guid>
			<description><![CDATA[Je ne sais pas quelle pourrait être l'erreur, aidez-moi s'il vous plaît.<br />
en partyline me sale este error<br />
[01:23:25] Tcl error [changeguest]: illegal channel: *<br />
<br />
<br />
<div class="codeblock"><div class="title">tcl<button class="copy">copier</button></div><div class="body"><code><pre class="tcl" style="font-family:monospace;">bind nick - <span style="color: #66cc66;">*</span> changeguest
<span style="color: #ff7700;font-weight:bold;">proc</span> changeguest <span style="color: black;">&#123;</span>nick uhost hand chan newnick<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
  <span style="color: #ff7700;font-weight:bold;">global</span> botnick ayudaguest
<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span>matchattr <span style="color: #ff3333;">&#36;hand</span> mnofb|mnofb <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span> || <span style="color: black;">&#91;</span>isop <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span> || <span style="color: black;">&#91;</span>isvoice <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span> || <span style="color: black;">&#91;</span>ishalfop <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">&amp;&amp;</span> <span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;nick</span> <span style="color: #66cc66;">!</span>= <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">botnick</span><span style="color: black;">&#41;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">0</span> <span style="color: black;">&#125;</span>
  <span style="color: #ff7700;font-weight:bold;">foreach</span> guest <span style="color: #ff3333;">&#36;ayudaguest</span> <span style="color: black;">&#123;</span>
<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">string</span> match -nocase <span style="color: #ff3333;">&#36;guest</span> <span style="color: #ff3333;">&#36;newnick</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
  puthelp <span style="color: #483d8b;">&quot;PRIVMSG &#36;chan :Si vous souhaitez utiliser un pseudo, tapez ceci /nick your-nick example /nick ralf et arrêtez d'être un invité.&quot;</span>
<span style="color: #ff7700;font-weight:bold;">break</span> <span style="color: #66cc66;">;</span>
<span style="color: black;">&#125;</span>
<span style="color: black;">&#125;</span>
<span style="color: black;">&#125;</span></pre></code></div></div><br /><br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="color: #E82A1F;" class="mycode_color">MODERATION: Deuxième avertissement ... merci de ne pas copier/coller d'un site mettant de la coloration syntaxique. </span></span>]]></description>
			<content:encoded><![CDATA[Je ne sais pas quelle pourrait être l'erreur, aidez-moi s'il vous plaît.<br />
en partyline me sale este error<br />
[01:23:25] Tcl error [changeguest]: illegal channel: *<br />
<br />
<br />
<div class="codeblock"><div class="title">tcl<button class="copy">copier</button></div><div class="body"><code><pre class="tcl" style="font-family:monospace;">bind nick - <span style="color: #66cc66;">*</span> changeguest
<span style="color: #ff7700;font-weight:bold;">proc</span> changeguest <span style="color: black;">&#123;</span>nick uhost hand chan newnick<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
  <span style="color: #ff7700;font-weight:bold;">global</span> botnick ayudaguest
<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span>matchattr <span style="color: #ff3333;">&#36;hand</span> mnofb|mnofb <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span> || <span style="color: black;">&#91;</span>isop <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span> || <span style="color: black;">&#91;</span>isvoice <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span> || <span style="color: black;">&#91;</span>ishalfop <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">&amp;&amp;</span> <span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;nick</span> <span style="color: #66cc66;">!</span>= <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">botnick</span><span style="color: black;">&#41;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">0</span> <span style="color: black;">&#125;</span>
  <span style="color: #ff7700;font-weight:bold;">foreach</span> guest <span style="color: #ff3333;">&#36;ayudaguest</span> <span style="color: black;">&#123;</span>
<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">string</span> match -nocase <span style="color: #ff3333;">&#36;guest</span> <span style="color: #ff3333;">&#36;newnick</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
  puthelp <span style="color: #483d8b;">&quot;PRIVMSG &#36;chan :Si vous souhaitez utiliser un pseudo, tapez ceci /nick your-nick example /nick ralf et arrêtez d'être un invité.&quot;</span>
<span style="color: #ff7700;font-weight:bold;">break</span> <span style="color: #66cc66;">;</span>
<span style="color: black;">&#125;</span>
<span style="color: black;">&#125;</span>
<span style="color: black;">&#125;</span></pre></code></div></div><br /><br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="color: #E82A1F;" class="mycode_color">MODERATION: Deuxième avertissement ... merci de ne pas copier/coller d'un site mettant de la coloration syntaxique. </span></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[aide dans les anti-caps TCL]]></title>
			<link>https://forum.eggdrop.fr/showthread.php?tid=1807</link>
			<pubDate>Wed, 11 Dec 2024 03:22:59 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.eggdrop.fr/member.php?action=profile&uid=3928">dino</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.eggdrop.fr/showthread.php?tid=1807</guid>
			<description><![CDATA[Je voulais modifier le tcl en ajoutant un chemin au code où, par exemple, il ignore l'utilisation de : or ;<br />
<br />
<div class="codeblock"><div class="title">tcl<button class="copy">copier</button></div><div class="body"><code><pre class="tcl" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># caps.tcl</span>
<span style="color: #808080; font-style: italic;">
# set bot user flags to ignore text</span>
<span style="color: #ff7700;font-weight:bold;">set</span> vCapsFlagsAllow fo
<span style="color: #808080; font-style: italic;">
# set text length (excluding spaces) to allow without checking</span>
<span style="color: #ff7700;font-weight:bold;">set</span> vCapsLengthAllow <span style="color: #ff4500;">8</span>
<span style="color: #808080; font-style: italic;">
# set maximum percentage caps allowed (calculation excludes spaces in text)</span>
<span style="color: #808080; font-style: italic;"># greater than 0, less than or equal to 100</span>
<span style="color: #ff7700;font-weight:bold;">set</span> vCapsPercentAllow <span style="color: #ff4500;">90</span>
<span style="color: #808080; font-style: italic;">
# set number of warnings before punishing</span>
<span style="color: #808080; font-style: italic;"># integer value equal to or greater than 1</span>
<span style="color: #ff7700;font-weight:bold;">set</span> vCapsWarnings <span style="color: #ff4500;">3</span>
<span style="color: #808080; font-style: italic;">
# set here the mode of punishment</span>
<span style="color: #808080; font-style: italic;"># 1 == kick only (after warnings)</span>
<span style="color: #808080; font-style: italic;"># 2 == kickban (after warnings)</span>
<span style="color: #ff7700;font-weight:bold;">set</span> vCapsPunishMode <span style="color: #ff4500;">1</span>
<span style="color: #808080; font-style: italic;">
# time in minutes within which a warning remains valid</span>
<span style="color: #808080; font-style: italic;"># even after the user is punished, passed offences remain valid for this time period</span>
<span style="color: #808080; font-style: italic;"># hence a user could be punished twice for two consecutive offences</span>
<span style="color: #ff7700;font-weight:bold;">set</span> vCapsSinTime <span style="color: #ff4500;">20</span>
<span style="color: #808080; font-style: italic;">
# if punishment mode 2, set here the time in minutes the ban lasts</span>
<span style="color: #ff7700;font-weight:bold;">set</span> vCapsBanTime <span style="color: #ff4500;">10</span>
<span style="color: #808080; font-style: italic;">
# Set this to 1 to ignore nicks in lines</span>
<span style="color: #ff7700;font-weight:bold;">set</span> vIgnoreNick <span style="color: #ff4500;">1</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">proc</span> ldiff <span style="color: black;">&#123;</span>list1 list2 <span style="color: black;">&#123;</span>option -exact<span style="color: black;">&#125;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
   <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;option</span> ne <span style="color: #483d8b;">&quot;-nocase&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">set</span> option -exact <span style="color: black;">&#125;</span>
   <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#91;</span>lmap x <span style="color: #ff3333;">&#36;list1</span> <span style="color: black;">&#123;</span><span style="color: #ff7700;font-weight:bold;">expr</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">lsearch</span> <span style="color: #ff3333;">&#36;option</span> <span style="color: #ff3333;">&#36;list2</span> <span style="color: #ff3333;">&#36;x</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">0</span> <span style="color: #66cc66;">?</span> <span style="color: #ff3333;">&#36;x</span> : <span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">continue</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span><span style="color: black;">&#125;</span><span style="color: black;">&#93;</span>
<span style="color: black;">&#125;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">proc</span> ctcp_capslock <span style="color: black;">&#123;</span>nick uhost hand chan keyword arg<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
   pCapsDetect <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;uhost</span> <span style="color: #ff3333;">&#36;hand</span> <span style="color: #ff3333;">&#36;chan</span> <span style="color: #ff3333;">&#36;arg</span>
<span style="color: black;">&#125;</span>
&nbsp;
bind PUBM - <span style="color: #66cc66;">*</span> pCapsDetect
&nbsp;
<span style="color: #ff7700;font-weight:bold;">proc</span> pCapsDetect <span style="color: black;">&#123;</span>nick uhost hand chan text<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
   <span style="color: #ff7700;font-weight:bold;">global</span> vCapsBanTime vCapsFlagsAllow vCapsLengthAllow vCapsPercentAllow
   <span style="color: #ff7700;font-weight:bold;">global</span> vCapsPunishMode vCapsSinBin vCapsSinTime vCapsWarnings
&nbsp;
   <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span>isbotnick <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span> || <span style="color: black;">&#91;</span><span style="color: #008000;">string</span> match -nocase <span style="color: #483d8b;">&quot;*:*&quot;</span> <span style="color: #ff3333;">&#36;text</span><span style="color: black;">&#93;</span> || <span style="color: black;">&#91;</span><span style="color: #008000;">string</span> match -nocase <span style="color: #483d8b;">&quot;*;*&quot;</span> <span style="color: #ff3333;">&#36;text</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">0</span> <span style="color: black;">&#125;</span>
   <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span>botisop <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
      <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span>matchattr <span style="color: black;">&#91;</span>nick2hand <span style="color: #ff3333;">&#36;nick</span><span style="color: black;">&#93;</span> <span style="color: #ff3333;">&#36;vCapsFlagsAllow</span> <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
         <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">&#36;</span>::<span style="color: black;">vIgnoreNick</span> == <span style="color: #ff4500;">1</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">set</span> nicks <span style="color: black;">&#91;</span><span style="color: #008000;">split</span> <span style="color: black;">&#91;</span>chanlist <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
            <span style="color: #ff7700;font-weight:bold;">set</span> text <span style="color: black;">&#91;</span><span style="color: #008000;">join</span> <span style="color: black;">&#91;</span>ldiff <span style="color: black;">&#91;</span><span style="color: #008000;">split</span> <span style="color: #ff3333;">&#36;text</span><span style="color: black;">&#93;</span> <span style="color: #ff3333;">&#36;nicks</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
         <span style="color: black;">&#125;</span>
         <span style="color: #ff7700;font-weight:bold;">set</span> caps <span style="color: black;">&#91;</span><span style="color: #008000;">regexp</span> -all -- <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span>A-Z<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: #ff3333;">&#36;text</span><span style="color: black;">&#93;</span>
         <span style="color: #ff7700;font-weight:bold;">set</span> total <span style="color: black;">&#91;</span><span style="color: #008000;">string</span> length <span style="color: black;">&#91;</span><span style="color: #008000;">regsub</span> -all -- <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span>&#092;s<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: #ff3333;">&#36;text</span> <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
         <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;total</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #ff3333;">&#36;vCapsLengthAllow</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">set</span> percent <span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">expr</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;caps</span> <span style="color: #66cc66;">*</span> <span style="color: #ff4500;">100.0</span> / <span style="color: #ff3333;">&#36;total</span><span style="color: black;">&#125;</span><span style="color: black;">&#93;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;percent</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #ff3333;">&#36;vCapsPercentAllow</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
               <span style="color: #ff7700;font-weight:bold;">set</span> now <span style="color: black;">&#91;</span>unixtime<span style="color: black;">&#93;</span>
               <span style="color: #ff7700;font-weight:bold;">set</span> max <span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">expr</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;now</span> - <span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;vCapsSinTime</span> <span style="color: #66cc66;">*</span> <span style="color: #ff4500;">60</span><span style="color: black;">&#41;</span><span style="color: black;">&#125;</span><span style="color: black;">&#93;</span>
               <span style="color: #008000;">lappend</span> vCapsSinBin<span style="color: black;">&#40;</span><span style="color: #66cc66;">&#36;</span><span style="color: black;">&#123;</span>nick<span style="color: black;">&#125;</span>,<span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;now</span>
               <span style="color: #ff7700;font-weight:bold;">foreach</span> sin <span style="color: #ff3333;">&#36;vCapsSinBin</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">&#36;</span><span style="color: black;">&#123;</span>nick<span style="color: black;">&#125;</span>,<span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#41;</span> <span style="color: black;">&#123;</span>
                  <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;sin</span> <span style="color: #66cc66;">&gt;</span>= <span style="color: #ff3333;">&#36;max</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span><span style="color: #008000;">lappend</span> newlist <span style="color: #ff3333;">&#36;sin</span><span style="color: black;">&#125;</span>
               <span style="color: black;">&#125;</span>
               <span style="color: #ff7700;font-weight:bold;">set</span> vCapsSinBin<span style="color: black;">&#40;</span><span style="color: #66cc66;">&#36;</span><span style="color: black;">&#123;</span>nick<span style="color: black;">&#125;</span>,<span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;newlist</span>
               <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">llength</span> <span style="color: #ff3333;">&#36;vCapsSinBin</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">&#36;</span><span style="color: black;">&#123;</span>nick<span style="color: black;">&#125;</span>,<span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #ff3333;">&#36;vCapsWarnings</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
                  <span style="color: #ff7700;font-weight:bold;">switch</span> -- <span style="color: #ff3333;">&#36;vCapsPunishMode</span> <span style="color: black;">&#123;</span>
                     <span style="color: #ff4500;">1</span> <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>
                     <span style="color: #ff4500;">2</span> <span style="color: black;">&#123;</span>
                        pushmode <span style="color: #ff3333;">&#36;chan</span> +b <span style="color: #66cc66;">&#36;</span><span style="color: black;">&#123;</span>nick<span style="color: black;">&#125;</span><span style="color: #66cc66;">!</span><span style="color: #ff3333;">&#36;uhost</span>
                        flushmode <span style="color: #ff3333;">&#36;chan</span>
                        timer <span style="color: #ff3333;">&#36;vCapsBanTime</span> <span style="color: black;">&#91;</span><span style="color: #008000;">list</span> pushmode <span style="color: #ff3333;">&#36;chan</span> -b <span style="color: #66cc66;">&#36;</span><span style="color: black;">&#123;</span>nick<span style="color: black;">&#125;</span><span style="color: #66cc66;">!</span><span style="color: #ff3333;">&#36;uhost</span><span style="color: black;">&#93;</span>
                     <span style="color: black;">&#125;</span>
                     <span style="color: #ff7700;font-weight:bold;">default</span> <span style="color: black;">&#123;</span><span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span>
                  <span style="color: black;">&#125;</span>
                  putkick <span style="color: #ff3333;">&#36;chan</span> <span style="color: #ff3333;">&#36;nick</span> <span style="color: #483d8b;">&quot;excess caps, you were warned&quot;</span>
               <span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">else</span> <span style="color: black;">&#123;</span>
                  <span style="color: #ff7700;font-weight:bold;">set</span> output <span style="color: #483d8b;">&quot;*** [llength &#36;vCapsSinBin(&#36;{nick},&#36;chan)] WARNING(S) *** within the last &#36;vCapsSinTime minutes for excess caps&quot;</span>
                  putserv <span style="color: #483d8b;">&quot;PRIVMSG &#36;chan :&#36;nick &#36;output&quot;</span>
               <span style="color: black;">&#125;</span>
            <span style="color: black;">&#125;</span>
         <span style="color: black;">&#125;</span>
      <span style="color: black;">&#125;</span>
   <span style="color: black;">&#125;</span>
   <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">0</span>
<span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
# eof</span></pre></code></div></div><br /><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #FF0000;" class="mycode_color">Modération: merci de ne pas copier/coller d'un site mettant de la coloration syntaxique</span></span>]]></description>
			<content:encoded><![CDATA[Je voulais modifier le tcl en ajoutant un chemin au code où, par exemple, il ignore l'utilisation de : or ;<br />
<br />
<div class="codeblock"><div class="title">tcl<button class="copy">copier</button></div><div class="body"><code><pre class="tcl" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># caps.tcl</span>
<span style="color: #808080; font-style: italic;">
# set bot user flags to ignore text</span>
<span style="color: #ff7700;font-weight:bold;">set</span> vCapsFlagsAllow fo
<span style="color: #808080; font-style: italic;">
# set text length (excluding spaces) to allow without checking</span>
<span style="color: #ff7700;font-weight:bold;">set</span> vCapsLengthAllow <span style="color: #ff4500;">8</span>
<span style="color: #808080; font-style: italic;">
# set maximum percentage caps allowed (calculation excludes spaces in text)</span>
<span style="color: #808080; font-style: italic;"># greater than 0, less than or equal to 100</span>
<span style="color: #ff7700;font-weight:bold;">set</span> vCapsPercentAllow <span style="color: #ff4500;">90</span>
<span style="color: #808080; font-style: italic;">
# set number of warnings before punishing</span>
<span style="color: #808080; font-style: italic;"># integer value equal to or greater than 1</span>
<span style="color: #ff7700;font-weight:bold;">set</span> vCapsWarnings <span style="color: #ff4500;">3</span>
<span style="color: #808080; font-style: italic;">
# set here the mode of punishment</span>
<span style="color: #808080; font-style: italic;"># 1 == kick only (after warnings)</span>
<span style="color: #808080; font-style: italic;"># 2 == kickban (after warnings)</span>
<span style="color: #ff7700;font-weight:bold;">set</span> vCapsPunishMode <span style="color: #ff4500;">1</span>
<span style="color: #808080; font-style: italic;">
# time in minutes within which a warning remains valid</span>
<span style="color: #808080; font-style: italic;"># even after the user is punished, passed offences remain valid for this time period</span>
<span style="color: #808080; font-style: italic;"># hence a user could be punished twice for two consecutive offences</span>
<span style="color: #ff7700;font-weight:bold;">set</span> vCapsSinTime <span style="color: #ff4500;">20</span>
<span style="color: #808080; font-style: italic;">
# if punishment mode 2, set here the time in minutes the ban lasts</span>
<span style="color: #ff7700;font-weight:bold;">set</span> vCapsBanTime <span style="color: #ff4500;">10</span>
<span style="color: #808080; font-style: italic;">
# Set this to 1 to ignore nicks in lines</span>
<span style="color: #ff7700;font-weight:bold;">set</span> vIgnoreNick <span style="color: #ff4500;">1</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">proc</span> ldiff <span style="color: black;">&#123;</span>list1 list2 <span style="color: black;">&#123;</span>option -exact<span style="color: black;">&#125;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
   <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;option</span> ne <span style="color: #483d8b;">&quot;-nocase&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">set</span> option -exact <span style="color: black;">&#125;</span>
   <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#91;</span>lmap x <span style="color: #ff3333;">&#36;list1</span> <span style="color: black;">&#123;</span><span style="color: #ff7700;font-weight:bold;">expr</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">lsearch</span> <span style="color: #ff3333;">&#36;option</span> <span style="color: #ff3333;">&#36;list2</span> <span style="color: #ff3333;">&#36;x</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">0</span> <span style="color: #66cc66;">?</span> <span style="color: #ff3333;">&#36;x</span> : <span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">continue</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span><span style="color: black;">&#125;</span><span style="color: black;">&#93;</span>
<span style="color: black;">&#125;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">proc</span> ctcp_capslock <span style="color: black;">&#123;</span>nick uhost hand chan keyword arg<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
   pCapsDetect <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;uhost</span> <span style="color: #ff3333;">&#36;hand</span> <span style="color: #ff3333;">&#36;chan</span> <span style="color: #ff3333;">&#36;arg</span>
<span style="color: black;">&#125;</span>
&nbsp;
bind PUBM - <span style="color: #66cc66;">*</span> pCapsDetect
&nbsp;
<span style="color: #ff7700;font-weight:bold;">proc</span> pCapsDetect <span style="color: black;">&#123;</span>nick uhost hand chan text<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
   <span style="color: #ff7700;font-weight:bold;">global</span> vCapsBanTime vCapsFlagsAllow vCapsLengthAllow vCapsPercentAllow
   <span style="color: #ff7700;font-weight:bold;">global</span> vCapsPunishMode vCapsSinBin vCapsSinTime vCapsWarnings
&nbsp;
   <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span>isbotnick <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span> || <span style="color: black;">&#91;</span><span style="color: #008000;">string</span> match -nocase <span style="color: #483d8b;">&quot;*:*&quot;</span> <span style="color: #ff3333;">&#36;text</span><span style="color: black;">&#93;</span> || <span style="color: black;">&#91;</span><span style="color: #008000;">string</span> match -nocase <span style="color: #483d8b;">&quot;*;*&quot;</span> <span style="color: #ff3333;">&#36;text</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">0</span> <span style="color: black;">&#125;</span>
   <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span>botisop <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
      <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span>matchattr <span style="color: black;">&#91;</span>nick2hand <span style="color: #ff3333;">&#36;nick</span><span style="color: black;">&#93;</span> <span style="color: #ff3333;">&#36;vCapsFlagsAllow</span> <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
         <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">&#36;</span>::<span style="color: black;">vIgnoreNick</span> == <span style="color: #ff4500;">1</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">set</span> nicks <span style="color: black;">&#91;</span><span style="color: #008000;">split</span> <span style="color: black;">&#91;</span>chanlist <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
            <span style="color: #ff7700;font-weight:bold;">set</span> text <span style="color: black;">&#91;</span><span style="color: #008000;">join</span> <span style="color: black;">&#91;</span>ldiff <span style="color: black;">&#91;</span><span style="color: #008000;">split</span> <span style="color: #ff3333;">&#36;text</span><span style="color: black;">&#93;</span> <span style="color: #ff3333;">&#36;nicks</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
         <span style="color: black;">&#125;</span>
         <span style="color: #ff7700;font-weight:bold;">set</span> caps <span style="color: black;">&#91;</span><span style="color: #008000;">regexp</span> -all -- <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span>A-Z<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: #ff3333;">&#36;text</span><span style="color: black;">&#93;</span>
         <span style="color: #ff7700;font-weight:bold;">set</span> total <span style="color: black;">&#91;</span><span style="color: #008000;">string</span> length <span style="color: black;">&#91;</span><span style="color: #008000;">regsub</span> -all -- <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span>&#092;s<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: #ff3333;">&#36;text</span> <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
         <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;total</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #ff3333;">&#36;vCapsLengthAllow</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
            <span style="color: #ff7700;font-weight:bold;">set</span> percent <span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">expr</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;caps</span> <span style="color: #66cc66;">*</span> <span style="color: #ff4500;">100.0</span> / <span style="color: #ff3333;">&#36;total</span><span style="color: black;">&#125;</span><span style="color: black;">&#93;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;percent</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #ff3333;">&#36;vCapsPercentAllow</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
               <span style="color: #ff7700;font-weight:bold;">set</span> now <span style="color: black;">&#91;</span>unixtime<span style="color: black;">&#93;</span>
               <span style="color: #ff7700;font-weight:bold;">set</span> max <span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">expr</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;now</span> - <span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;vCapsSinTime</span> <span style="color: #66cc66;">*</span> <span style="color: #ff4500;">60</span><span style="color: black;">&#41;</span><span style="color: black;">&#125;</span><span style="color: black;">&#93;</span>
               <span style="color: #008000;">lappend</span> vCapsSinBin<span style="color: black;">&#40;</span><span style="color: #66cc66;">&#36;</span><span style="color: black;">&#123;</span>nick<span style="color: black;">&#125;</span>,<span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;now</span>
               <span style="color: #ff7700;font-weight:bold;">foreach</span> sin <span style="color: #ff3333;">&#36;vCapsSinBin</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">&#36;</span><span style="color: black;">&#123;</span>nick<span style="color: black;">&#125;</span>,<span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#41;</span> <span style="color: black;">&#123;</span>
                  <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;sin</span> <span style="color: #66cc66;">&gt;</span>= <span style="color: #ff3333;">&#36;max</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span><span style="color: #008000;">lappend</span> newlist <span style="color: #ff3333;">&#36;sin</span><span style="color: black;">&#125;</span>
               <span style="color: black;">&#125;</span>
               <span style="color: #ff7700;font-weight:bold;">set</span> vCapsSinBin<span style="color: black;">&#40;</span><span style="color: #66cc66;">&#36;</span><span style="color: black;">&#123;</span>nick<span style="color: black;">&#125;</span>,<span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;newlist</span>
               <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">llength</span> <span style="color: #ff3333;">&#36;vCapsSinBin</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">&#36;</span><span style="color: black;">&#123;</span>nick<span style="color: black;">&#125;</span>,<span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #ff3333;">&#36;vCapsWarnings</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
                  <span style="color: #ff7700;font-weight:bold;">switch</span> -- <span style="color: #ff3333;">&#36;vCapsPunishMode</span> <span style="color: black;">&#123;</span>
                     <span style="color: #ff4500;">1</span> <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>
                     <span style="color: #ff4500;">2</span> <span style="color: black;">&#123;</span>
                        pushmode <span style="color: #ff3333;">&#36;chan</span> +b <span style="color: #66cc66;">&#36;</span><span style="color: black;">&#123;</span>nick<span style="color: black;">&#125;</span><span style="color: #66cc66;">!</span><span style="color: #ff3333;">&#36;uhost</span>
                        flushmode <span style="color: #ff3333;">&#36;chan</span>
                        timer <span style="color: #ff3333;">&#36;vCapsBanTime</span> <span style="color: black;">&#91;</span><span style="color: #008000;">list</span> pushmode <span style="color: #ff3333;">&#36;chan</span> -b <span style="color: #66cc66;">&#36;</span><span style="color: black;">&#123;</span>nick<span style="color: black;">&#125;</span><span style="color: #66cc66;">!</span><span style="color: #ff3333;">&#36;uhost</span><span style="color: black;">&#93;</span>
                     <span style="color: black;">&#125;</span>
                     <span style="color: #ff7700;font-weight:bold;">default</span> <span style="color: black;">&#123;</span><span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span>
                  <span style="color: black;">&#125;</span>
                  putkick <span style="color: #ff3333;">&#36;chan</span> <span style="color: #ff3333;">&#36;nick</span> <span style="color: #483d8b;">&quot;excess caps, you were warned&quot;</span>
               <span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">else</span> <span style="color: black;">&#123;</span>
                  <span style="color: #ff7700;font-weight:bold;">set</span> output <span style="color: #483d8b;">&quot;*** [llength &#36;vCapsSinBin(&#36;{nick},&#36;chan)] WARNING(S) *** within the last &#36;vCapsSinTime minutes for excess caps&quot;</span>
                  putserv <span style="color: #483d8b;">&quot;PRIVMSG &#36;chan :&#36;nick &#36;output&quot;</span>
               <span style="color: black;">&#125;</span>
            <span style="color: black;">&#125;</span>
         <span style="color: black;">&#125;</span>
      <span style="color: black;">&#125;</span>
   <span style="color: black;">&#125;</span>
   <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">0</span>
<span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
# eof</span></pre></code></div></div><br /><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #FF0000;" class="mycode_color">Modération: merci de ne pas copier/coller d'un site mettant de la coloration syntaxique</span></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Amélioration d'un script pour le rendre plus performant]]></title>
			<link>https://forum.eggdrop.fr/showthread.php?tid=1803</link>
			<pubDate>Thu, 26 Sep 2024 15:57:32 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.eggdrop.fr/member.php?action=profile&uid=3843">Amand</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.eggdrop.fr/showthread.php?tid=1803</guid>
			<description><![CDATA[Hello à tous,<br />
<br />
j'ai besoin d'optimiser un script pour le rendre plus performant :<br />
<br />
<div class="codeblock"><div class="title">tcl<button class="copy">copier</button></div><div class="body"><code><pre class="tcl" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># Regexp connection user </span>
<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">regexpclientco</span> <span style="color: black;">&#123;</span>:&#092; <span style="color: black;">&#40;</span>.<span style="color: #66cc66;">*</span><span style="color: black;">&#41;</span>&#092; &#092;<span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>.<span style="color: #66cc66;">*?</span><span style="color: black;">&#41;</span>@<span style="color: black;">&#40;</span>.<span style="color: #66cc66;">*?</span><span style="color: black;">&#41;</span>&#092;<span style="color: black;">&#41;</span> &#092;<span style="color: black;">&#91;</span><span style="color: black;">&#40;</span>.<span style="color: #66cc66;">*?</span><span style="color: black;">&#41;</span>&#092;<span style="color: black;">&#93;</span> &#092;<span style="color: black;">&#91;</span>vhost: <span style="color: black;">&#40;</span>.<span style="color: #66cc66;">*?</span><span style="color: black;">&#41;</span>&#092;<span style="color: black;">&#93;</span> <span style="color: black;">&#40;</span>.<span style="color: #66cc66;">*</span><span style="color: black;">&#41;</span>&#092; &#092;<span style="color: black;">&#91;</span>country: <span style="color: black;">&#40;</span>.<span style="color: #66cc66;">*?</span><span style="color: black;">&#41;</span>&#092;<span style="color: black;">&#93;</span> &#092;<span style="color: black;">&#91;</span>asn: <span style="color: black;">&#40;</span>.<span style="color: #66cc66;">*?</span><span style="color: black;">&#41;</span>&#092;<span style="color: black;">&#93;</span> &#092;<span style="color: black;">&#91;</span>asname: <span style="color: black;">&#40;</span>.<span style="color: #66cc66;">*?</span><span style="color: black;">&#41;</span>&#092;<span style="color: black;">&#93;</span> &#092;<span style="color: black;">&#91;</span>reputation: <span style="color: black;">&#40;</span>.<span style="color: #66cc66;">*?</span><span style="color: black;">&#41;</span>&#092;<span style="color: black;">&#93;</span> <span style="color: black;">&#40;</span>.+<span style="color: black;">&#41;</span><span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
# Realname age sexe</span>
<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">regexpagesex</span> <span style="color: black;">&#123;</span>^&#092;d<span style="color: black;">&#123;</span><span style="color: #ff4500;">1</span>,<span style="color: #ff4500;">2</span><span style="color: black;">&#125;</span> <span style="color: black;">&#91;</span>HFM<span style="color: black;">&#93;</span><span style="color: black;">&#40;</span> .+<span style="color: black;">&#41;</span><span style="color: #66cc66;">?</span><span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
# regexp pour match les ados de 12 à 17ans</span>
<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">regexpado</span> <span style="color: black;">&#123;</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span>-<span style="color: #ff4500;">7</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span> <span style="color: black;">&#40;</span>H|F|M<span style="color: black;">&#41;</span><span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
############################################</span>
<span style="color: #808080; font-style: italic;">#        PROC TRAITEMENT CONNECTING        #</span>
<span style="color: #808080; font-style: italic;">############################################</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">proc</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">who</span>:co <span style="color: black;">&#123;</span>from keyword text<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span><span style="color: #008000;">string</span> match -nocase <span style="color: #483d8b;">&quot;*Client connecting*&quot;</span> <span style="color: #ff3333;">&#36;text</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
		<span style="color: #ff7700;font-weight:bold;">return</span><span style="color: #66cc66;">;</span>
	<span style="color: black;">&#125;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">set</span> sslco <span style="color: #ff4500;">0</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> webirc <span style="color: #ff4500;">0</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> websocket <span style="color: #ff4500;">0</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> unknow <span style="color: #ff4500;">0</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> account <span style="color: #ff4500;">0</span>
&nbsp;
	<span style="color: #008000;">regexp</span> <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">regexpclientco</span> <span style="color: #ff3333;">&#36;text</span> - nick username ip ipdns vhost csa codepays asn asname reputation other
<span style="color: #808080; font-style: italic;">
	# IP Except</span>
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;ip</span> eq <span style="color: #483d8b;">&quot;127.0.0.1&quot;</span> || <span style="color: black;">&#91;</span>isbotnick <span style="color: #ff3333;">&#36;nick</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
		<span style="color: #ff7700;font-weight:bold;">return</span>
	<span style="color: black;">&#125;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">set</span> SESSION <span style="color: black;">&#91;</span>md5 <span style="color: #483d8b;">&quot;&#36;{username}@&#36;{vhost}&quot;</span><span style="color: black;">&#93;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">string</span> match -nocase <span style="color: #483d8b;">&quot;*tls-users*&quot;</span> <span style="color: #ff3333;">&#36;other</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
		<span style="color: #ff7700;font-weight:bold;">set</span> sslco <span style="color: #ff4500;">1</span>
	<span style="color: black;">&#125;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">string</span> match -nocase <span style="color: #483d8b;">&quot;*webirc-users*&quot;</span> <span style="color: #ff3333;">&#36;other</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
		<span style="color: #ff7700;font-weight:bold;">set</span> webirc <span style="color: #ff4500;">1</span>
	<span style="color: black;">&#125;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">string</span> match -nocase <span style="color: #483d8b;">&quot;*websocket-users*&quot;</span> <span style="color: #ff3333;">&#36;other</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
		<span style="color: #ff7700;font-weight:bold;">set</span> websocket <span style="color: #ff4500;">1</span>
	<span style="color: black;">&#125;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">string</span> match -nocase <span style="color: #483d8b;">&quot;*unknown-users*&quot;</span> <span style="color: #ff3333;">&#36;other</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
		<span style="color: #ff7700;font-weight:bold;">set</span> unknow <span style="color: #ff4500;">1</span>
	<span style="color: black;">&#125;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">string</span> match -nocase <span style="color: #483d8b;">&quot;*account:*&quot;</span> <span style="color: #ff3333;">&#36;csa</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
		<span style="color: #ff7700;font-weight:bold;">set</span> account <span style="color: #ff4500;">1</span>
	<span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
	# On met en mémoire les valeurs qu'on ne récupère pas dans le who</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,IP<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;ip</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,IPDNS<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;ipdns</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,CODEPAYS<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;codepays</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,ASN<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;asn</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,ASNAME<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;asname</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,REPUTATION<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;reputation</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,SSLCO<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;sslco</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,WEBIRC<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;webirc</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,WEBSOCKET<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;websocket</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,UNKNOW<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;unknow</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,ACCOUNT<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;account</span>
&nbsp;
	putnow <span style="color: #483d8b;">&quot;WHO &#36;nick %unhr&quot;</span>
&nbsp;
<span style="color: black;">&#125;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">proc</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">who</span>:gestion <span style="color: black;">&#123;</span>from key text<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
   	<span style="color: #ff7700;font-weight:bold;">set</span> text <span style="color: black;">&#91;</span><span style="color: #008000;">split</span> <span style="color: black;">&#91;</span><span style="color: #008000;">string</span> trim <span style="color: #ff3333;">&#36;text</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
	lassign <span style="color: #ff3333;">&#36;text</span> <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span> username vhost nick
	<span style="color: #ff7700;font-weight:bold;">set</span> SESSION <span style="color: black;">&#91;</span>md5 <span style="color: #483d8b;">&quot;&#36;{username}@&#36;{vhost}&quot;</span><span style="color: black;">&#93;</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> realname <span style="color: black;">&#91;</span><span style="color: #008000;">join</span> <span style="color: black;">&#91;</span><span style="color: #008000;">lrange</span> <span style="color: black;">&#91;</span><span style="color: #008000;">split</span> <span style="color: #ff3333;">&#36;text</span> <span style="color: black;">&#123;</span>:<span style="color: black;">&#125;</span><span style="color: black;">&#93;</span> <span style="color: #ff4500;">1</span> end<span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
<span style="color: #808080; font-style: italic;">
	## On recupere les variables en mémoire</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ip <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,IP<span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ipdns <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,IPDNS<span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> sslco <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,SSLCO<span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> webirc <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,WEBIRC<span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> websocket <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,WEBSOCKET<span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> reputation <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,REPUTATION<span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> codepays <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,CODEPAYS<span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> asn <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,ASN<span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> asname <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,ASNAME<span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> unknow <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,UNKNOW<span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> account <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,ACCOUNT<span style="color: black;">&#41;</span>
<span style="color: #808080; font-style: italic;">
	# Nick/Ip/Ident EXCEPTION</span>
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span>::<span style="color: black;">toolsAmand</span>::<span style="color: black;">verify</span>:b <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">fichier</span><span style="color: black;">&#40;</span>ident<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;username</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
		putnow <span style="color: #483d8b;">&quot;PRIVMSG &#36;::checkpays::backpaysbl :<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;0</span>030,3EXCEPTION - IDENT<span style="color: #000099; font-weight: bold;">&#092;0</span>03<span style="color: #000099; font-weight: bold;">&#092;0</span>02 <span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;[</span><span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;codepays<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;]</span><span style="color: #000099; font-weight: bold;">&#092;0</span>02 - &#36;nick (&#36;username@&#36;ip) (Réputation: &#36;reputation) (Sslco: &#36;sslco) (Webirc: &#36;webirc) (Websocket: &#36;websocket) (Asn: &#36;asn) (Asname: &#36;asname) - Realname: &#36;realname&quot;</span>
		::<span style="color: black;">checkpays</span>::<span style="color: black;">monitoring</span> <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;username</span> <span style="color: #ff3333;">&#36;ip</span> <span style="color: #ff3333;">&#36;vhost</span> <span style="color: #ff3333;">&#36;codepays</span> <span style="color: #ff3333;">&#36;reputation</span> <span style="color: #ff3333;">&#36;sslco</span> <span style="color: #ff3333;">&#36;webirc</span> <span style="color: #ff3333;">&#36;websocket</span> <span style="color: #ff3333;">&#36;realname</span> <span style="color: #ff3333;">&#36;asn</span> <span style="color: #ff3333;">&#36;asname</span>
		::<span style="color: black;">checkpays</span>::<span style="color: black;">CountIRC</span> <span style="color: #ff3333;">&#36;ip</span> <span style="color: #ff3333;">&#36;username</span> <span style="color: #ff3333;">&#36;codepays</span> <span style="color: #ff3333;">&#36;webirc</span> <span style="color: #ff3333;">&#36;websocket</span>
		<span style="color: #ff7700;font-weight:bold;">return</span>
&nbsp;
	<span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">elseif</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span>::<span style="color: black;">toolsAmand</span>::<span style="color: black;">verify</span>:b <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">fichier</span><span style="color: black;">&#40;</span>pseudo<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;nick</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
		putnow <span style="color: #483d8b;">&quot;PRIVMSG &#36;::checkpays::backpaysbl :<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;0</span>030,3EXCEPTION - PSEUDO<span style="color: #000099; font-weight: bold;">&#092;0</span>03<span style="color: #000099; font-weight: bold;">&#092;0</span>02 <span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;[</span><span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;codepays<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;]</span><span style="color: #000099; font-weight: bold;">&#092;0</span>02 - &#36;nick (&#36;username@&#36;ip) (Réputation: &#36;reputation) (Sslco: &#36;sslco) (Webirc: &#36;webirc) (Websocket: &#36;websocket) (Asn: &#36;asn) (Asname: &#36;asname) - Realname: &#36;realname&quot;</span>
		::<span style="color: black;">checkpays</span>::<span style="color: black;">monitoring</span> <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;username</span> <span style="color: #ff3333;">&#36;ip</span> <span style="color: #ff3333;">&#36;vhost</span> <span style="color: #ff3333;">&#36;codepays</span> <span style="color: #ff3333;">&#36;reputation</span> <span style="color: #ff3333;">&#36;sslco</span> <span style="color: #ff3333;">&#36;webirc</span> <span style="color: #ff3333;">&#36;websocket</span> <span style="color: #ff3333;">&#36;realname</span> <span style="color: #ff3333;">&#36;asn</span> <span style="color: #ff3333;">&#36;asname</span>
		::<span style="color: black;">checkpays</span>::<span style="color: black;">CountIRC</span> <span style="color: #ff3333;">&#36;ip</span> <span style="color: #ff3333;">&#36;username</span> <span style="color: #ff3333;">&#36;codepays</span> <span style="color: #ff3333;">&#36;webirc</span> <span style="color: #ff3333;">&#36;websocket</span>
		<span style="color: #ff7700;font-weight:bold;">return</span>
&nbsp;
	<span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">elseif</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span>::<span style="color: black;">toolsAmand</span>::<span style="color: black;">verify</span>:b <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">fichier</span><span style="color: black;">&#40;</span>ip<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;ip</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
		putnow <span style="color: #483d8b;">&quot;PRIVMSG &#36;::checkpays::backpaysbl :<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;0</span>030,3EXCEPTION - IP<span style="color: #000099; font-weight: bold;">&#092;0</span>03<span style="color: #000099; font-weight: bold;">&#092;0</span>02 <span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;[</span><span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;codepays<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;]</span><span style="color: #000099; font-weight: bold;">&#092;0</span>02 - &#36;nick (&#36;username@&#36;ip) (Réputation: &#36;reputation) (Sslco: &#36;sslco) (Webirc: &#36;webirc) (Websocket: &#36;websocket) (Asn: &#36;asn) (Asname: &#36;asname) - Realname: &#36;realname&quot;</span>
		::<span style="color: black;">checkpays</span>::<span style="color: black;">monitoring</span> <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;username</span> <span style="color: #ff3333;">&#36;ip</span> <span style="color: #ff3333;">&#36;vhost</span> <span style="color: #ff3333;">&#36;codepays</span> <span style="color: #ff3333;">&#36;reputation</span> <span style="color: #ff3333;">&#36;sslco</span> <span style="color: #ff3333;">&#36;webirc</span> <span style="color: #ff3333;">&#36;websocket</span> <span style="color: #ff3333;">&#36;realname</span> <span style="color: #ff3333;">&#36;asn</span> <span style="color: #ff3333;">&#36;asname</span>
		::<span style="color: black;">checkpays</span>::<span style="color: black;">CountIRC</span> <span style="color: #ff3333;">&#36;ip</span> <span style="color: #ff3333;">&#36;username</span> <span style="color: #ff3333;">&#36;codepays</span> <span style="color: #ff3333;">&#36;webirc</span> <span style="color: #ff3333;">&#36;websocket</span>
		<span style="color: #ff7700;font-weight:bold;">return</span>
&nbsp;
	<span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">else</span> <span style="color: black;">&#123;</span>
&nbsp;
	<span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
	# On envoie à la proc de traitement</span>
	::<span style="color: black;">checkpays</span>::<span style="color: black;">traitement</span> <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;username</span> <span style="color: #ff3333;">&#36;ip</span> <span style="color: #ff3333;">&#36;ipdns</span> <span style="color: #ff3333;">&#36;vhost</span> <span style="color: #ff3333;">&#36;codepays</span> <span style="color: #ff3333;">&#36;asn</span> <span style="color: #ff3333;">&#36;asname</span> <span style="color: #ff3333;">&#36;reputation</span> <span style="color: #ff3333;">&#36;sslco</span> <span style="color: #ff3333;">&#36;webirc</span> <span style="color: #ff3333;">&#36;websocket</span> <span style="color: #ff3333;">&#36;unknow</span> <span style="color: #ff3333;">&#36;realname</span> <span style="color: #ff3333;">&#36;account</span>
<span style="color: #808080; font-style: italic;">
	# Changement du realname en ASV / Redirection ados</span>
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">regexp</span> <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">regexpagesex</span> <span style="color: #ff3333;">&#36;realname</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">!</span>= <span style="color: #ff4500;">1</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
		putnow <span style="color: #483d8b;">&quot;CHGNAME &#36;nick [expr 18 + int(rand()*72)] M&quot;</span>
		putnow <span style="color: #483d8b;">&quot;PRIVMSG &#36;::checkpays::backpaysredirect :<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;0</span>0300,02REALNAME<span style="color: #000099; font-weight: bold;">&#092;0</span>03<span style="color: #000099; font-weight: bold;">&#092;0</span>02 - <span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;nick<span style="color: #000099; font-weight: bold;">&#092;0</span>02 <span style="color: #000099; font-weight: bold;">&#092;[</span>&#36;codepays<span style="color: #000099; font-weight: bold;">&#092;]</span> (&#36;username@&#36;ip) (Réputation: &#36;reputation) (Ssl: &#36;sslco) (Webirc: &#36;webirc) (Websocket: &#36;websocket) (Account: &#36;account) (Asn: &#36;asn) (Asname: &#36;asname) vient d'être changé. Realname: &#36;realname&quot;</span>
&nbsp;
	<span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">elseif</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">regexp</span> <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">regexpado</span> <span style="color: #ff3333;">&#36;realname</span><span style="color: black;">&#93;</span> == <span style="color: #ff4500;">1</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
		putnow <span style="color: #483d8b;">&quot;PRIVMSG OperServ :SVSJOIN &#36;nick &#36;::checkpays::salonado&quot;</span>
		putnow <span style="color: #483d8b;">&quot;SAUMODE &#36;nick +R&quot;</span>
<span style="color: #808080; font-style: italic;">		#putnow &quot;PRIVMSG &#36;::checkpays::backpaysredirect :&#092;002&#092;0030,6ADO&#092;002&#092;003 - &#092;002&#36;nick&#092;002 (&#36;username@&#36;ip) a été redirigé sur &#092;002&#36;::checkpays::salonado&#092;002 - &#092;002Realname:&#092;002 &#36;realname&quot;</span>
&nbsp;
	<span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">else</span> <span style="color: black;">&#123;</span>
&nbsp;
	<span style="color: black;">&#125;</span>
&nbsp;
<span style="color: black;">&#125;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">proc</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">traitement</span> <span style="color: black;">&#123;</span>nick username ip ipdns vhost codepays asn asname reputation sslco webirc websocket unknow realname account<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">set</span> SESSION <span style="color: black;">&#91;</span>md5 <span style="color: #483d8b;">&quot;&#36;{username}@&#36;{vhost}&quot;</span><span style="color: black;">&#93;</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ALLEXCEPTIONS <span style="color: black;">&#91;</span><span style="color: #008000;">list</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">*</span><span style="color: black;">&#125;</span><span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">PAYSINTERDIT</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">*</span><span style="color: black;">&#125;</span><span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">PAYSINTERDITNWSI</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">*</span><span style="color: black;">&#125;</span><span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">PAYSINTERDITNW</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">*</span><span style="color: black;">&#125;</span><span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">PAYSIPAPI</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">*</span><span style="color: black;">&#125;</span><span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">PAYSEXCEPTION</span><span style="color: black;">&#93;</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> sanction <span style="color: #ff4500;">0</span>
<span style="color: #808080; font-style: italic;">
&nbsp;
	# IP-API</span>
<span style="color: #808080; font-style: italic;">
	# Bloquer IPAPI Proxy/Hosting - IPABUSEIPDB</span>
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">lsearch</span> <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">PAYSIPAPI</span> <span style="color: #ff3333;">&#36;codepays</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">!</span>=-<span style="color: #ff4500;">1</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
		::<span style="color: black;">checkpays</span>::<span style="color: black;">infoAPI</span> <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;username</span> <span style="color: #ff3333;">&#36;ip</span> <span style="color: #ff3333;">&#36;ipdns</span> <span style="color: #ff3333;">&#36;unknow</span> <span style="color: #ff3333;">&#36;reputation</span> <span style="color: #ff3333;">&#36;realname</span> <span style="color: #ff3333;">&#36;webirc</span> <span style="color: #ff3333;">&#36;websocket</span> <span style="color: #ff3333;">&#36;account</span>
	<span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
	# Traitement</span>
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">lsearch</span> <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">PAYSINTERDIT</span> <span style="color: #ff3333;">&#36;codepays</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">!</span>= -<span style="color: #ff4500;">1</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
		<span style="color: #ff7700;font-weight:bold;">set</span> sanction <span style="color: #ff4500;">1</span>
		putnow <span style="color: #483d8b;">&quot;GLINE *@&#36;ip &#36;::checkpays::timeBans &#36;::checkpays::motifpaysbl&quot;</span>
		putnow <span style="color: #483d8b;">&quot;PRIVMSG &#36;::checkpays::backpaysbl :<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;0</span>030,4PAYS BLOQUÉ<span style="color: #000099; font-weight: bold;">&#092;0</span>03<span style="color: #000099; font-weight: bold;">&#092;0</span>02 <span style="color: #000099; font-weight: bold;">&#092;[</span><span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;codepays<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;]</span> - <span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;nick<span style="color: #000099; font-weight: bold;">&#092;0</span>02 (&#36;username@&#36;ip) (Réputation: &#36;reputation) (Ssl: &#36;sslco) (Webirc: &#36;webirc) (Websocket: &#36;websocket) (Asn: &#36;asn) (Asname: &#36;asname) - Realname: &#36;realname&quot;</span>
&nbsp;
	<span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">elseif</span> <span style="color: black;">&#123;</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span><span style="color: #008000;">lsearch</span> <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">PAYSINTERDITNWSI</span> <span style="color: #ff3333;">&#36;codepays</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">!</span>= -<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">&amp;&amp;</span> <span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;webirc</span> == <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">&amp;&amp;</span> <span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;websocket</span> == <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">&amp;&amp;</span> <span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;reputation</span> <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">200</span><span style="color: black;">&#41;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
		<span style="color: #ff7700;font-weight:bold;">set</span> sanction <span style="color: #ff4500;">1</span>
		putnow <span style="color: #483d8b;">&quot;GLINE *@&#36;ip &#36;::checkpays::timeBans &#36;::checkpays::motifpaysbl&quot;</span>
		putnow <span style="color: #483d8b;">&quot;PRIVMSG &#36;::checkpays::backpaysbl :<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;0</span>030,12PAYS BLOQUÉ - HORS WEB|RÉPUTATION<span style="color: #000099; font-weight: bold;">&#092;0</span>03<span style="color: #000099; font-weight: bold;">&#092;0</span>02 <span style="color: #000099; font-weight: bold;">&#092;[</span><span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;codepays<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;]</span> - <span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;nick<span style="color: #000099; font-weight: bold;">&#092;0</span>02 (&#36;username@&#36;ip) (Réputation: &#36;reputation) (Ssl: &#36;sslco) (Webirc: &#36;webirc) (Websocket: &#36;websocket) (Asn: &#36;asn) (Asname: &#36;asname) - Realname: &#36;realname&quot;</span>
&nbsp;
	<span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">elseif</span> <span style="color: black;">&#123;</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span><span style="color: #008000;">lsearch</span> <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">PAYSINTERDITNW</span> <span style="color: #ff3333;">&#36;codepays</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">!</span>= -<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">&amp;&amp;</span> <span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;webirc</span> == <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">&amp;&amp;</span> <span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;websocket</span> == <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
		<span style="color: #ff7700;font-weight:bold;">set</span> sanction <span style="color: #ff4500;">1</span>
		putnow <span style="color: #483d8b;">&quot;GLINE *@&#36;ip &#36;::checkpays::timeBans &#36;::checkpays::motifpaysbl&quot;</span>
		putnow <span style="color: #483d8b;">&quot;PRIVMSG &#36;::checkpays::backpaysbl :<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;0</span>030,6PAYS BLOQUÉ - HORS WEB<span style="color: #000099; font-weight: bold;">&#092;0</span>03<span style="color: #000099; font-weight: bold;">&#092;0</span>02 <span style="color: #000099; font-weight: bold;">&#092;[</span><span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;codepays<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;]</span> - <span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;nick<span style="color: #000099; font-weight: bold;">&#092;0</span>02 (&#36;username@&#36;ip) (Réputation: &#36;reputation) (Ssl: &#36;sslco) (Webirc: &#36;webirc) (Websocket: &#36;websocket) (Asn: &#36;asn) (Asname: &#36;asname) - Realname: &#36;realname&quot;</span>
&nbsp;
	<span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">elseif</span> <span style="color: black;">&#123;</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;codepays</span> eq <span style="color: #483d8b;">&quot;US&quot;</span><span style="color: black;">&#41;</span> || <span style="color: black;">&#40;</span><span style="color: black;">&#91;</span><span style="color: #008000;">string</span> match <span style="color: #483d8b;">&quot;*.irccloud.com&quot;</span> <span style="color: #ff3333;">&#36;ip</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
		<span style="color: #ff7700;font-weight:bold;">set</span> sanction <span style="color: #ff4500;">1</span>
		putnow <span style="color: #483d8b;">&quot;GLINE &#36;username@&#36;ip &#36;::checkpays::timeBans &#36;::checkpays::motifpaysbl&quot;</span>
		putnow <span style="color: #483d8b;">&quot;PRIVMSG &#36;::checkpays::backpaysbl :<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;0</span>030,10IRCCloud|US<span style="color: #000099; font-weight: bold;">&#092;0</span>03<span style="color: #000099; font-weight: bold;">&#092;0</span>02 <span style="color: #000099; font-weight: bold;">&#092;[</span><span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;codepays<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;]</span> - <span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;nick<span style="color: #000099; font-weight: bold;">&#092;0</span>02 (&#36;username@&#36;ip) (Réputation: &#36;reputation) (Ssl: &#36;sslco) (Webirc: &#36;webirc) (Websocket: &#36;websocket) (Asn: &#36;asn) (Asname: &#36;asname) - Realname: &#36;realname&quot;</span>
&nbsp;
	<span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">else</span> <span style="color: black;">&#123;</span><span style="color: #808080; font-style: italic;">
&nbsp;
		# Si on entre pas dans une condition blacklisté on envoie à la proc du monitoring</span>
		::<span style="color: black;">checkpays</span>::<span style="color: black;">monitoring</span> <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;username</span> <span style="color: #ff3333;">&#36;ip</span> <span style="color: #ff3333;">&#36;vhost</span> <span style="color: #ff3333;">&#36;codepays</span> <span style="color: #ff3333;">&#36;reputation</span> <span style="color: #ff3333;">&#36;sslco</span> <span style="color: #ff3333;">&#36;webirc</span> <span style="color: #ff3333;">&#36;websocket</span> <span style="color: #ff3333;">&#36;realname</span> <span style="color: #ff3333;">&#36;asn</span> <span style="color: #ff3333;">&#36;asname</span>
		::<span style="color: black;">checkpays</span>::<span style="color: black;">CountIRC</span> <span style="color: #ff3333;">&#36;ip</span> <span style="color: #ff3333;">&#36;username</span> <span style="color: #ff3333;">&#36;codepays</span> <span style="color: #ff3333;">&#36;webirc</span> <span style="color: #ff3333;">&#36;websocket</span>
&nbsp;
	<span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
	# Vérification si le codepays est hors liste interdit/protégé</span>
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">lsearch</span> <span style="color: #ff3333;">&#36;ALLEXCEPTIONS</span> <span style="color: #ff3333;">&#36;codepays</span><span style="color: black;">&#93;</span>==-<span style="color: #ff4500;">1</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
		putnow <span style="color: #483d8b;">&quot;PRIVMSG &#36;::checkpays::backpaysbl :<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;0</span>030,14USER SUSPECT<span style="color: #000099; font-weight: bold;">&#092;0</span>03<span style="color: #000099; font-weight: bold;">&#092;0</span>02 <span style="color: #000099; font-weight: bold;">&#092;[</span><span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;codepays<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;]</span> - <span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;nick<span style="color: #000099; font-weight: bold;">&#092;0</span>02 (&#36;username@&#36;ip) (Réputation: &#36;reputation) (Ssl: &#36;sslco) (Webirc: &#36;webirc) (Websocket: &#36;websocket) (Asn: &#36;asn) (Asname: &#36;asname) - Realname: &#36;realname&quot;</span>
		::<span style="color: black;">checkpays</span>::<span style="color: black;">infoAPI</span> <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;username</span> <span style="color: #ff3333;">&#36;ip</span> <span style="color: #ff3333;">&#36;ipdns</span> <span style="color: #ff3333;">&#36;unknow</span> <span style="color: #ff3333;">&#36;reputation</span> <span style="color: #ff3333;">&#36;realname</span> <span style="color: #ff3333;">&#36;webirc</span> <span style="color: #ff3333;">&#36;websocket</span> <span style="color: #ff3333;">&#36;account</span>
		::<span style="color: black;">checkpays</span>::<span style="color: black;">infoABUSEIPDB</span> <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;username</span> <span style="color: #ff3333;">&#36;ipdns</span>
	<span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
	# Suppression des valeurs en mémoire.</span>
<span style="color: #808080; font-style: italic;">	# https://www.astro.princeton.edu/~rhl/Tcl-Tk_docs/tcl/unset.n.html</span>
	unset ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,IP<span style="color: black;">&#41;</span>
	unset ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,IPDNS<span style="color: black;">&#41;</span>
	unset ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,REPUTATION<span style="color: black;">&#41;</span>
	unset ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,SSLCO<span style="color: black;">&#41;</span>
	unset ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,WEBIRC<span style="color: black;">&#41;</span>
	unset ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,CODEPAYS<span style="color: black;">&#41;</span>
	unset ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,WEBSOCKET<span style="color: black;">&#41;</span>
	unset ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,ASN<span style="color: black;">&#41;</span>
	unset ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,ASNAME<span style="color: black;">&#41;</span>
	unset ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,UNKNOW<span style="color: black;">&#41;</span>
	unset ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,ACCOUNT<span style="color: black;">&#41;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;sanction</span> == <span style="color: #ff4500;">1</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
		<span style="color: #ff7700;font-weight:bold;">return</span>
	<span style="color: black;">&#125;</span>
&nbsp;
<span style="color: black;">&#125;</span></pre></code></div></div><br /><br />
<br />
Il manque des variables/fonctions, j'ai mis les lignes essentiels pour faire un focus sur la problématique et de la partie qui doit être optimiser.<br />
<br />
Il est fonctionnel, mais je pense qu'on peut faire largement mieux pour le rendre plus fluide , si vous avez des idées, welcome.]]></description>
			<content:encoded><![CDATA[Hello à tous,<br />
<br />
j'ai besoin d'optimiser un script pour le rendre plus performant :<br />
<br />
<div class="codeblock"><div class="title">tcl<button class="copy">copier</button></div><div class="body"><code><pre class="tcl" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># Regexp connection user </span>
<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">regexpclientco</span> <span style="color: black;">&#123;</span>:&#092; <span style="color: black;">&#40;</span>.<span style="color: #66cc66;">*</span><span style="color: black;">&#41;</span>&#092; &#092;<span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>.<span style="color: #66cc66;">*?</span><span style="color: black;">&#41;</span>@<span style="color: black;">&#40;</span>.<span style="color: #66cc66;">*?</span><span style="color: black;">&#41;</span>&#092;<span style="color: black;">&#41;</span> &#092;<span style="color: black;">&#91;</span><span style="color: black;">&#40;</span>.<span style="color: #66cc66;">*?</span><span style="color: black;">&#41;</span>&#092;<span style="color: black;">&#93;</span> &#092;<span style="color: black;">&#91;</span>vhost: <span style="color: black;">&#40;</span>.<span style="color: #66cc66;">*?</span><span style="color: black;">&#41;</span>&#092;<span style="color: black;">&#93;</span> <span style="color: black;">&#40;</span>.<span style="color: #66cc66;">*</span><span style="color: black;">&#41;</span>&#092; &#092;<span style="color: black;">&#91;</span>country: <span style="color: black;">&#40;</span>.<span style="color: #66cc66;">*?</span><span style="color: black;">&#41;</span>&#092;<span style="color: black;">&#93;</span> &#092;<span style="color: black;">&#91;</span>asn: <span style="color: black;">&#40;</span>.<span style="color: #66cc66;">*?</span><span style="color: black;">&#41;</span>&#092;<span style="color: black;">&#93;</span> &#092;<span style="color: black;">&#91;</span>asname: <span style="color: black;">&#40;</span>.<span style="color: #66cc66;">*?</span><span style="color: black;">&#41;</span>&#092;<span style="color: black;">&#93;</span> &#092;<span style="color: black;">&#91;</span>reputation: <span style="color: black;">&#40;</span>.<span style="color: #66cc66;">*?</span><span style="color: black;">&#41;</span>&#092;<span style="color: black;">&#93;</span> <span style="color: black;">&#40;</span>.+<span style="color: black;">&#41;</span><span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
# Realname age sexe</span>
<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">regexpagesex</span> <span style="color: black;">&#123;</span>^&#092;d<span style="color: black;">&#123;</span><span style="color: #ff4500;">1</span>,<span style="color: #ff4500;">2</span><span style="color: black;">&#125;</span> <span style="color: black;">&#91;</span>HFM<span style="color: black;">&#93;</span><span style="color: black;">&#40;</span> .+<span style="color: black;">&#41;</span><span style="color: #66cc66;">?</span><span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
# regexp pour match les ados de 12 à 17ans</span>
<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">regexpado</span> <span style="color: black;">&#123;</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span>-<span style="color: #ff4500;">7</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span> <span style="color: black;">&#40;</span>H|F|M<span style="color: black;">&#41;</span><span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
############################################</span>
<span style="color: #808080; font-style: italic;">#        PROC TRAITEMENT CONNECTING        #</span>
<span style="color: #808080; font-style: italic;">############################################</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">proc</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">who</span>:co <span style="color: black;">&#123;</span>from keyword text<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span><span style="color: #008000;">string</span> match -nocase <span style="color: #483d8b;">&quot;*Client connecting*&quot;</span> <span style="color: #ff3333;">&#36;text</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
		<span style="color: #ff7700;font-weight:bold;">return</span><span style="color: #66cc66;">;</span>
	<span style="color: black;">&#125;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">set</span> sslco <span style="color: #ff4500;">0</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> webirc <span style="color: #ff4500;">0</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> websocket <span style="color: #ff4500;">0</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> unknow <span style="color: #ff4500;">0</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> account <span style="color: #ff4500;">0</span>
&nbsp;
	<span style="color: #008000;">regexp</span> <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">regexpclientco</span> <span style="color: #ff3333;">&#36;text</span> - nick username ip ipdns vhost csa codepays asn asname reputation other
<span style="color: #808080; font-style: italic;">
	# IP Except</span>
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;ip</span> eq <span style="color: #483d8b;">&quot;127.0.0.1&quot;</span> || <span style="color: black;">&#91;</span>isbotnick <span style="color: #ff3333;">&#36;nick</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
		<span style="color: #ff7700;font-weight:bold;">return</span>
	<span style="color: black;">&#125;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">set</span> SESSION <span style="color: black;">&#91;</span>md5 <span style="color: #483d8b;">&quot;&#36;{username}@&#36;{vhost}&quot;</span><span style="color: black;">&#93;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">string</span> match -nocase <span style="color: #483d8b;">&quot;*tls-users*&quot;</span> <span style="color: #ff3333;">&#36;other</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
		<span style="color: #ff7700;font-weight:bold;">set</span> sslco <span style="color: #ff4500;">1</span>
	<span style="color: black;">&#125;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">string</span> match -nocase <span style="color: #483d8b;">&quot;*webirc-users*&quot;</span> <span style="color: #ff3333;">&#36;other</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
		<span style="color: #ff7700;font-weight:bold;">set</span> webirc <span style="color: #ff4500;">1</span>
	<span style="color: black;">&#125;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">string</span> match -nocase <span style="color: #483d8b;">&quot;*websocket-users*&quot;</span> <span style="color: #ff3333;">&#36;other</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
		<span style="color: #ff7700;font-weight:bold;">set</span> websocket <span style="color: #ff4500;">1</span>
	<span style="color: black;">&#125;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">string</span> match -nocase <span style="color: #483d8b;">&quot;*unknown-users*&quot;</span> <span style="color: #ff3333;">&#36;other</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
		<span style="color: #ff7700;font-weight:bold;">set</span> unknow <span style="color: #ff4500;">1</span>
	<span style="color: black;">&#125;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">string</span> match -nocase <span style="color: #483d8b;">&quot;*account:*&quot;</span> <span style="color: #ff3333;">&#36;csa</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
		<span style="color: #ff7700;font-weight:bold;">set</span> account <span style="color: #ff4500;">1</span>
	<span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
	# On met en mémoire les valeurs qu'on ne récupère pas dans le who</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,IP<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;ip</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,IPDNS<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;ipdns</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,CODEPAYS<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;codepays</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,ASN<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;asn</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,ASNAME<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;asname</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,REPUTATION<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;reputation</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,SSLCO<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;sslco</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,WEBIRC<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;webirc</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,WEBSOCKET<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;websocket</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,UNKNOW<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;unknow</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,ACCOUNT<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;account</span>
&nbsp;
	putnow <span style="color: #483d8b;">&quot;WHO &#36;nick %unhr&quot;</span>
&nbsp;
<span style="color: black;">&#125;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">proc</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">who</span>:gestion <span style="color: black;">&#123;</span>from key text<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
   	<span style="color: #ff7700;font-weight:bold;">set</span> text <span style="color: black;">&#91;</span><span style="color: #008000;">split</span> <span style="color: black;">&#91;</span><span style="color: #008000;">string</span> trim <span style="color: #ff3333;">&#36;text</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
	lassign <span style="color: #ff3333;">&#36;text</span> <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span> username vhost nick
	<span style="color: #ff7700;font-weight:bold;">set</span> SESSION <span style="color: black;">&#91;</span>md5 <span style="color: #483d8b;">&quot;&#36;{username}@&#36;{vhost}&quot;</span><span style="color: black;">&#93;</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> realname <span style="color: black;">&#91;</span><span style="color: #008000;">join</span> <span style="color: black;">&#91;</span><span style="color: #008000;">lrange</span> <span style="color: black;">&#91;</span><span style="color: #008000;">split</span> <span style="color: #ff3333;">&#36;text</span> <span style="color: black;">&#123;</span>:<span style="color: black;">&#125;</span><span style="color: black;">&#93;</span> <span style="color: #ff4500;">1</span> end<span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
<span style="color: #808080; font-style: italic;">
	## On recupere les variables en mémoire</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ip <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,IP<span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ipdns <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,IPDNS<span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> sslco <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,SSLCO<span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> webirc <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,WEBIRC<span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> websocket <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,WEBSOCKET<span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> reputation <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,REPUTATION<span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> codepays <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,CODEPAYS<span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> asn <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,ASN<span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> asname <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,ASNAME<span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> unknow <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,UNKNOW<span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> account <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,ACCOUNT<span style="color: black;">&#41;</span>
<span style="color: #808080; font-style: italic;">
	# Nick/Ip/Ident EXCEPTION</span>
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span>::<span style="color: black;">toolsAmand</span>::<span style="color: black;">verify</span>:b <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">fichier</span><span style="color: black;">&#40;</span>ident<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;username</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
		putnow <span style="color: #483d8b;">&quot;PRIVMSG &#36;::checkpays::backpaysbl :<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;0</span>030,3EXCEPTION - IDENT<span style="color: #000099; font-weight: bold;">&#092;0</span>03<span style="color: #000099; font-weight: bold;">&#092;0</span>02 <span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;[</span><span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;codepays<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;]</span><span style="color: #000099; font-weight: bold;">&#092;0</span>02 - &#36;nick (&#36;username@&#36;ip) (Réputation: &#36;reputation) (Sslco: &#36;sslco) (Webirc: &#36;webirc) (Websocket: &#36;websocket) (Asn: &#36;asn) (Asname: &#36;asname) - Realname: &#36;realname&quot;</span>
		::<span style="color: black;">checkpays</span>::<span style="color: black;">monitoring</span> <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;username</span> <span style="color: #ff3333;">&#36;ip</span> <span style="color: #ff3333;">&#36;vhost</span> <span style="color: #ff3333;">&#36;codepays</span> <span style="color: #ff3333;">&#36;reputation</span> <span style="color: #ff3333;">&#36;sslco</span> <span style="color: #ff3333;">&#36;webirc</span> <span style="color: #ff3333;">&#36;websocket</span> <span style="color: #ff3333;">&#36;realname</span> <span style="color: #ff3333;">&#36;asn</span> <span style="color: #ff3333;">&#36;asname</span>
		::<span style="color: black;">checkpays</span>::<span style="color: black;">CountIRC</span> <span style="color: #ff3333;">&#36;ip</span> <span style="color: #ff3333;">&#36;username</span> <span style="color: #ff3333;">&#36;codepays</span> <span style="color: #ff3333;">&#36;webirc</span> <span style="color: #ff3333;">&#36;websocket</span>
		<span style="color: #ff7700;font-weight:bold;">return</span>
&nbsp;
	<span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">elseif</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span>::<span style="color: black;">toolsAmand</span>::<span style="color: black;">verify</span>:b <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">fichier</span><span style="color: black;">&#40;</span>pseudo<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;nick</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
		putnow <span style="color: #483d8b;">&quot;PRIVMSG &#36;::checkpays::backpaysbl :<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;0</span>030,3EXCEPTION - PSEUDO<span style="color: #000099; font-weight: bold;">&#092;0</span>03<span style="color: #000099; font-weight: bold;">&#092;0</span>02 <span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;[</span><span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;codepays<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;]</span><span style="color: #000099; font-weight: bold;">&#092;0</span>02 - &#36;nick (&#36;username@&#36;ip) (Réputation: &#36;reputation) (Sslco: &#36;sslco) (Webirc: &#36;webirc) (Websocket: &#36;websocket) (Asn: &#36;asn) (Asname: &#36;asname) - Realname: &#36;realname&quot;</span>
		::<span style="color: black;">checkpays</span>::<span style="color: black;">monitoring</span> <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;username</span> <span style="color: #ff3333;">&#36;ip</span> <span style="color: #ff3333;">&#36;vhost</span> <span style="color: #ff3333;">&#36;codepays</span> <span style="color: #ff3333;">&#36;reputation</span> <span style="color: #ff3333;">&#36;sslco</span> <span style="color: #ff3333;">&#36;webirc</span> <span style="color: #ff3333;">&#36;websocket</span> <span style="color: #ff3333;">&#36;realname</span> <span style="color: #ff3333;">&#36;asn</span> <span style="color: #ff3333;">&#36;asname</span>
		::<span style="color: black;">checkpays</span>::<span style="color: black;">CountIRC</span> <span style="color: #ff3333;">&#36;ip</span> <span style="color: #ff3333;">&#36;username</span> <span style="color: #ff3333;">&#36;codepays</span> <span style="color: #ff3333;">&#36;webirc</span> <span style="color: #ff3333;">&#36;websocket</span>
		<span style="color: #ff7700;font-weight:bold;">return</span>
&nbsp;
	<span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">elseif</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span>::<span style="color: black;">toolsAmand</span>::<span style="color: black;">verify</span>:b <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">fichier</span><span style="color: black;">&#40;</span>ip<span style="color: black;">&#41;</span> <span style="color: #ff3333;">&#36;ip</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
		putnow <span style="color: #483d8b;">&quot;PRIVMSG &#36;::checkpays::backpaysbl :<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;0</span>030,3EXCEPTION - IP<span style="color: #000099; font-weight: bold;">&#092;0</span>03<span style="color: #000099; font-weight: bold;">&#092;0</span>02 <span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;[</span><span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;codepays<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;]</span><span style="color: #000099; font-weight: bold;">&#092;0</span>02 - &#36;nick (&#36;username@&#36;ip) (Réputation: &#36;reputation) (Sslco: &#36;sslco) (Webirc: &#36;webirc) (Websocket: &#36;websocket) (Asn: &#36;asn) (Asname: &#36;asname) - Realname: &#36;realname&quot;</span>
		::<span style="color: black;">checkpays</span>::<span style="color: black;">monitoring</span> <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;username</span> <span style="color: #ff3333;">&#36;ip</span> <span style="color: #ff3333;">&#36;vhost</span> <span style="color: #ff3333;">&#36;codepays</span> <span style="color: #ff3333;">&#36;reputation</span> <span style="color: #ff3333;">&#36;sslco</span> <span style="color: #ff3333;">&#36;webirc</span> <span style="color: #ff3333;">&#36;websocket</span> <span style="color: #ff3333;">&#36;realname</span> <span style="color: #ff3333;">&#36;asn</span> <span style="color: #ff3333;">&#36;asname</span>
		::<span style="color: black;">checkpays</span>::<span style="color: black;">CountIRC</span> <span style="color: #ff3333;">&#36;ip</span> <span style="color: #ff3333;">&#36;username</span> <span style="color: #ff3333;">&#36;codepays</span> <span style="color: #ff3333;">&#36;webirc</span> <span style="color: #ff3333;">&#36;websocket</span>
		<span style="color: #ff7700;font-weight:bold;">return</span>
&nbsp;
	<span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">else</span> <span style="color: black;">&#123;</span>
&nbsp;
	<span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
	# On envoie à la proc de traitement</span>
	::<span style="color: black;">checkpays</span>::<span style="color: black;">traitement</span> <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;username</span> <span style="color: #ff3333;">&#36;ip</span> <span style="color: #ff3333;">&#36;ipdns</span> <span style="color: #ff3333;">&#36;vhost</span> <span style="color: #ff3333;">&#36;codepays</span> <span style="color: #ff3333;">&#36;asn</span> <span style="color: #ff3333;">&#36;asname</span> <span style="color: #ff3333;">&#36;reputation</span> <span style="color: #ff3333;">&#36;sslco</span> <span style="color: #ff3333;">&#36;webirc</span> <span style="color: #ff3333;">&#36;websocket</span> <span style="color: #ff3333;">&#36;unknow</span> <span style="color: #ff3333;">&#36;realname</span> <span style="color: #ff3333;">&#36;account</span>
<span style="color: #808080; font-style: italic;">
	# Changement du realname en ASV / Redirection ados</span>
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">regexp</span> <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">regexpagesex</span> <span style="color: #ff3333;">&#36;realname</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">!</span>= <span style="color: #ff4500;">1</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
		putnow <span style="color: #483d8b;">&quot;CHGNAME &#36;nick [expr 18 + int(rand()*72)] M&quot;</span>
		putnow <span style="color: #483d8b;">&quot;PRIVMSG &#36;::checkpays::backpaysredirect :<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;0</span>0300,02REALNAME<span style="color: #000099; font-weight: bold;">&#092;0</span>03<span style="color: #000099; font-weight: bold;">&#092;0</span>02 - <span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;nick<span style="color: #000099; font-weight: bold;">&#092;0</span>02 <span style="color: #000099; font-weight: bold;">&#092;[</span>&#36;codepays<span style="color: #000099; font-weight: bold;">&#092;]</span> (&#36;username@&#36;ip) (Réputation: &#36;reputation) (Ssl: &#36;sslco) (Webirc: &#36;webirc) (Websocket: &#36;websocket) (Account: &#36;account) (Asn: &#36;asn) (Asname: &#36;asname) vient d'être changé. Realname: &#36;realname&quot;</span>
&nbsp;
	<span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">elseif</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">regexp</span> <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">regexpado</span> <span style="color: #ff3333;">&#36;realname</span><span style="color: black;">&#93;</span> == <span style="color: #ff4500;">1</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
		putnow <span style="color: #483d8b;">&quot;PRIVMSG OperServ :SVSJOIN &#36;nick &#36;::checkpays::salonado&quot;</span>
		putnow <span style="color: #483d8b;">&quot;SAUMODE &#36;nick +R&quot;</span>
<span style="color: #808080; font-style: italic;">		#putnow &quot;PRIVMSG &#36;::checkpays::backpaysredirect :&#092;002&#092;0030,6ADO&#092;002&#092;003 - &#092;002&#36;nick&#092;002 (&#36;username@&#36;ip) a été redirigé sur &#092;002&#36;::checkpays::salonado&#092;002 - &#092;002Realname:&#092;002 &#36;realname&quot;</span>
&nbsp;
	<span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">else</span> <span style="color: black;">&#123;</span>
&nbsp;
	<span style="color: black;">&#125;</span>
&nbsp;
<span style="color: black;">&#125;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">proc</span> ::<span style="color: black;">checkpays</span>::<span style="color: black;">traitement</span> <span style="color: black;">&#123;</span>nick username ip ipdns vhost codepays asn asname reputation sslco webirc websocket unknow realname account<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">set</span> SESSION <span style="color: black;">&#91;</span>md5 <span style="color: #483d8b;">&quot;&#36;{username}@&#36;{vhost}&quot;</span><span style="color: black;">&#93;</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> ALLEXCEPTIONS <span style="color: black;">&#91;</span><span style="color: #008000;">list</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">*</span><span style="color: black;">&#125;</span><span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">PAYSINTERDIT</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">*</span><span style="color: black;">&#125;</span><span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">PAYSINTERDITNWSI</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">*</span><span style="color: black;">&#125;</span><span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">PAYSINTERDITNW</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">*</span><span style="color: black;">&#125;</span><span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">PAYSIPAPI</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">*</span><span style="color: black;">&#125;</span><span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">PAYSEXCEPTION</span><span style="color: black;">&#93;</span>
	<span style="color: #ff7700;font-weight:bold;">set</span> sanction <span style="color: #ff4500;">0</span>
<span style="color: #808080; font-style: italic;">
&nbsp;
	# IP-API</span>
<span style="color: #808080; font-style: italic;">
	# Bloquer IPAPI Proxy/Hosting - IPABUSEIPDB</span>
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">lsearch</span> <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">PAYSIPAPI</span> <span style="color: #ff3333;">&#36;codepays</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">!</span>=-<span style="color: #ff4500;">1</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
		::<span style="color: black;">checkpays</span>::<span style="color: black;">infoAPI</span> <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;username</span> <span style="color: #ff3333;">&#36;ip</span> <span style="color: #ff3333;">&#36;ipdns</span> <span style="color: #ff3333;">&#36;unknow</span> <span style="color: #ff3333;">&#36;reputation</span> <span style="color: #ff3333;">&#36;realname</span> <span style="color: #ff3333;">&#36;webirc</span> <span style="color: #ff3333;">&#36;websocket</span> <span style="color: #ff3333;">&#36;account</span>
	<span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
	# Traitement</span>
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">lsearch</span> <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">PAYSINTERDIT</span> <span style="color: #ff3333;">&#36;codepays</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">!</span>= -<span style="color: #ff4500;">1</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
		<span style="color: #ff7700;font-weight:bold;">set</span> sanction <span style="color: #ff4500;">1</span>
		putnow <span style="color: #483d8b;">&quot;GLINE *@&#36;ip &#36;::checkpays::timeBans &#36;::checkpays::motifpaysbl&quot;</span>
		putnow <span style="color: #483d8b;">&quot;PRIVMSG &#36;::checkpays::backpaysbl :<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;0</span>030,4PAYS BLOQUÉ<span style="color: #000099; font-weight: bold;">&#092;0</span>03<span style="color: #000099; font-weight: bold;">&#092;0</span>02 <span style="color: #000099; font-weight: bold;">&#092;[</span><span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;codepays<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;]</span> - <span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;nick<span style="color: #000099; font-weight: bold;">&#092;0</span>02 (&#36;username@&#36;ip) (Réputation: &#36;reputation) (Ssl: &#36;sslco) (Webirc: &#36;webirc) (Websocket: &#36;websocket) (Asn: &#36;asn) (Asname: &#36;asname) - Realname: &#36;realname&quot;</span>
&nbsp;
	<span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">elseif</span> <span style="color: black;">&#123;</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span><span style="color: #008000;">lsearch</span> <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">PAYSINTERDITNWSI</span> <span style="color: #ff3333;">&#36;codepays</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">!</span>= -<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">&amp;&amp;</span> <span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;webirc</span> == <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">&amp;&amp;</span> <span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;websocket</span> == <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">&amp;&amp;</span> <span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;reputation</span> <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">200</span><span style="color: black;">&#41;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
		<span style="color: #ff7700;font-weight:bold;">set</span> sanction <span style="color: #ff4500;">1</span>
		putnow <span style="color: #483d8b;">&quot;GLINE *@&#36;ip &#36;::checkpays::timeBans &#36;::checkpays::motifpaysbl&quot;</span>
		putnow <span style="color: #483d8b;">&quot;PRIVMSG &#36;::checkpays::backpaysbl :<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;0</span>030,12PAYS BLOQUÉ - HORS WEB|RÉPUTATION<span style="color: #000099; font-weight: bold;">&#092;0</span>03<span style="color: #000099; font-weight: bold;">&#092;0</span>02 <span style="color: #000099; font-weight: bold;">&#092;[</span><span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;codepays<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;]</span> - <span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;nick<span style="color: #000099; font-weight: bold;">&#092;0</span>02 (&#36;username@&#36;ip) (Réputation: &#36;reputation) (Ssl: &#36;sslco) (Webirc: &#36;webirc) (Websocket: &#36;websocket) (Asn: &#36;asn) (Asname: &#36;asname) - Realname: &#36;realname&quot;</span>
&nbsp;
	<span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">elseif</span> <span style="color: black;">&#123;</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span><span style="color: #008000;">lsearch</span> <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">checkpays</span>::<span style="color: black;">PAYSINTERDITNW</span> <span style="color: #ff3333;">&#36;codepays</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">!</span>= -<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">&amp;&amp;</span> <span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;webirc</span> == <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">&amp;&amp;</span> <span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;websocket</span> == <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
		<span style="color: #ff7700;font-weight:bold;">set</span> sanction <span style="color: #ff4500;">1</span>
		putnow <span style="color: #483d8b;">&quot;GLINE *@&#36;ip &#36;::checkpays::timeBans &#36;::checkpays::motifpaysbl&quot;</span>
		putnow <span style="color: #483d8b;">&quot;PRIVMSG &#36;::checkpays::backpaysbl :<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;0</span>030,6PAYS BLOQUÉ - HORS WEB<span style="color: #000099; font-weight: bold;">&#092;0</span>03<span style="color: #000099; font-weight: bold;">&#092;0</span>02 <span style="color: #000099; font-weight: bold;">&#092;[</span><span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;codepays<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;]</span> - <span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;nick<span style="color: #000099; font-weight: bold;">&#092;0</span>02 (&#36;username@&#36;ip) (Réputation: &#36;reputation) (Ssl: &#36;sslco) (Webirc: &#36;webirc) (Websocket: &#36;websocket) (Asn: &#36;asn) (Asname: &#36;asname) - Realname: &#36;realname&quot;</span>
&nbsp;
	<span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">elseif</span> <span style="color: black;">&#123;</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;codepays</span> eq <span style="color: #483d8b;">&quot;US&quot;</span><span style="color: black;">&#41;</span> || <span style="color: black;">&#40;</span><span style="color: black;">&#91;</span><span style="color: #008000;">string</span> match <span style="color: #483d8b;">&quot;*.irccloud.com&quot;</span> <span style="color: #ff3333;">&#36;ip</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
		<span style="color: #ff7700;font-weight:bold;">set</span> sanction <span style="color: #ff4500;">1</span>
		putnow <span style="color: #483d8b;">&quot;GLINE &#36;username@&#36;ip &#36;::checkpays::timeBans &#36;::checkpays::motifpaysbl&quot;</span>
		putnow <span style="color: #483d8b;">&quot;PRIVMSG &#36;::checkpays::backpaysbl :<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;0</span>030,10IRCCloud|US<span style="color: #000099; font-weight: bold;">&#092;0</span>03<span style="color: #000099; font-weight: bold;">&#092;0</span>02 <span style="color: #000099; font-weight: bold;">&#092;[</span><span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;codepays<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;]</span> - <span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;nick<span style="color: #000099; font-weight: bold;">&#092;0</span>02 (&#36;username@&#36;ip) (Réputation: &#36;reputation) (Ssl: &#36;sslco) (Webirc: &#36;webirc) (Websocket: &#36;websocket) (Asn: &#36;asn) (Asname: &#36;asname) - Realname: &#36;realname&quot;</span>
&nbsp;
	<span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">else</span> <span style="color: black;">&#123;</span><span style="color: #808080; font-style: italic;">
&nbsp;
		# Si on entre pas dans une condition blacklisté on envoie à la proc du monitoring</span>
		::<span style="color: black;">checkpays</span>::<span style="color: black;">monitoring</span> <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;username</span> <span style="color: #ff3333;">&#36;ip</span> <span style="color: #ff3333;">&#36;vhost</span> <span style="color: #ff3333;">&#36;codepays</span> <span style="color: #ff3333;">&#36;reputation</span> <span style="color: #ff3333;">&#36;sslco</span> <span style="color: #ff3333;">&#36;webirc</span> <span style="color: #ff3333;">&#36;websocket</span> <span style="color: #ff3333;">&#36;realname</span> <span style="color: #ff3333;">&#36;asn</span> <span style="color: #ff3333;">&#36;asname</span>
		::<span style="color: black;">checkpays</span>::<span style="color: black;">CountIRC</span> <span style="color: #ff3333;">&#36;ip</span> <span style="color: #ff3333;">&#36;username</span> <span style="color: #ff3333;">&#36;codepays</span> <span style="color: #ff3333;">&#36;webirc</span> <span style="color: #ff3333;">&#36;websocket</span>
&nbsp;
	<span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
	# Vérification si le codepays est hors liste interdit/protégé</span>
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">lsearch</span> <span style="color: #ff3333;">&#36;ALLEXCEPTIONS</span> <span style="color: #ff3333;">&#36;codepays</span><span style="color: black;">&#93;</span>==-<span style="color: #ff4500;">1</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
		putnow <span style="color: #483d8b;">&quot;PRIVMSG &#36;::checkpays::backpaysbl :<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;0</span>030,14USER SUSPECT<span style="color: #000099; font-weight: bold;">&#092;0</span>03<span style="color: #000099; font-weight: bold;">&#092;0</span>02 <span style="color: #000099; font-weight: bold;">&#092;[</span><span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;codepays<span style="color: #000099; font-weight: bold;">&#092;0</span>02<span style="color: #000099; font-weight: bold;">&#092;]</span> - <span style="color: #000099; font-weight: bold;">&#092;0</span>02&#36;nick<span style="color: #000099; font-weight: bold;">&#092;0</span>02 (&#36;username@&#36;ip) (Réputation: &#36;reputation) (Ssl: &#36;sslco) (Webirc: &#36;webirc) (Websocket: &#36;websocket) (Asn: &#36;asn) (Asname: &#36;asname) - Realname: &#36;realname&quot;</span>
		::<span style="color: black;">checkpays</span>::<span style="color: black;">infoAPI</span> <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;username</span> <span style="color: #ff3333;">&#36;ip</span> <span style="color: #ff3333;">&#36;ipdns</span> <span style="color: #ff3333;">&#36;unknow</span> <span style="color: #ff3333;">&#36;reputation</span> <span style="color: #ff3333;">&#36;realname</span> <span style="color: #ff3333;">&#36;webirc</span> <span style="color: #ff3333;">&#36;websocket</span> <span style="color: #ff3333;">&#36;account</span>
		::<span style="color: black;">checkpays</span>::<span style="color: black;">infoABUSEIPDB</span> <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;username</span> <span style="color: #ff3333;">&#36;ipdns</span>
	<span style="color: black;">&#125;</span>
<span style="color: #808080; font-style: italic;">
	# Suppression des valeurs en mémoire.</span>
<span style="color: #808080; font-style: italic;">	# https://www.astro.princeton.edu/~rhl/Tcl-Tk_docs/tcl/unset.n.html</span>
	unset ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,IP<span style="color: black;">&#41;</span>
	unset ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,IPDNS<span style="color: black;">&#41;</span>
	unset ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,REPUTATION<span style="color: black;">&#41;</span>
	unset ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,SSLCO<span style="color: black;">&#41;</span>
	unset ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,WEBIRC<span style="color: black;">&#41;</span>
	unset ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,CODEPAYS<span style="color: black;">&#41;</span>
	unset ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,WEBSOCKET<span style="color: black;">&#41;</span>
	unset ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,ASN<span style="color: black;">&#41;</span>
	unset ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,ASNAME<span style="color: black;">&#41;</span>
	unset ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,UNKNOW<span style="color: black;">&#41;</span>
	unset ::<span style="color: black;">checkpays</span>::<span style="color: black;">DB</span><span style="color: black;">&#40;</span><span style="color: #ff3333;">&#36;SESSION</span>,ACCOUNT<span style="color: black;">&#41;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;sanction</span> == <span style="color: #ff4500;">1</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
		<span style="color: #ff7700;font-weight:bold;">return</span>
	<span style="color: black;">&#125;</span>
&nbsp;
<span style="color: black;">&#125;</span></pre></code></div></div><br /><br />
<br />
Il manque des variables/fonctions, j'ai mis les lignes essentiels pour faire un focus sur la problématique et de la partie qui doit être optimiser.<br />
<br />
Il est fonctionnel, mais je pense qu'on peut faire largement mieux pour le rendre plus fluide , si vous avez des idées, welcome.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Code TCL pour ban HOST + IDENT]]></title>
			<link>https://forum.eggdrop.fr/showthread.php?tid=1799</link>
			<pubDate>Tue, 30 Jul 2024 09:16:11 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.eggdrop.fr/member.php?action=profile&uid=3862">PiOn</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.eggdrop.fr/showthread.php?tid=1799</guid>
			<description><![CDATA[Bonjour,<br />
 <br />
Je laisse un message pour une aide concernant mon tcl<br />
Il bannit bien l'host, mais, je cherche a bannir l'ident également sous forme : *!blabla@*<br />
Dans ce que je vais vous mettre ci-dessous, il bannit mon propre ident.<br />
<br />
<div class="codeblock"><div class="title">tcl<button class="copy">copier</button></div><div class="body"><code><pre class="tcl" style="font-family:monospace;">bind pub - <span style="color: #66cc66;">!</span>kbapp kbapp
<span style="color: #ff7700;font-weight:bold;">proc</span> kbapp <span style="color: black;">&#123;</span>nick uhost handle chan args<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
  <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span>isop <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">&amp;&amp;</span> <span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span>ishalfop <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> putquick <span style="color: #483d8b;">&quot;NOTICE &#36;nick tu n'as pas accés à cette commande&quot;</span><span style="color: #66cc66;">;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span>
  <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">lindex</span> <span style="color: #ff3333;">&#36;args</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">!</span>=<span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
      <span style="color: #ff7700;font-weight:bold;">set</span> vnick <span style="color: black;">&#91;</span><span style="color: #008000;">lindex</span> <span style="color: #ff3333;">&#36;args</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
      <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span>onchan <span style="color: #ff3333;">&#36;vnick</span> <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> putquick <span style="color: #483d8b;">&quot;NOTICE &#36;nick :<span style="color: #000099; font-weight: bold;">&#092;0</span>0312 [Erreur] &#36;vnick n'est pas sur &#36;chan&quot;</span><span style="color: #66cc66;">;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span>
      <span style="color: #ff7700;font-weight:bold;">set</span> vhost <span style="color: black;">&#91;</span><span style="color: #008000;">lindex</span> <span style="color: black;">&#91;</span><span style="color: #008000;">split</span> <span style="color: black;">&#91;</span>getchanhost <span style="color: #ff3333;">&#36;vnick</span> <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span> <span style="color: #483d8b;">&quot;@&quot;</span><span style="color: black;">&#93;</span> <span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
  <span style="color: #ff7700;font-weight:bold;">set</span> uident <span style="color: black;">&#91;</span><span style="color: #008000;">string</span> trimleft <span style="color: black;">&#91;</span><span style="color: #008000;">lindex</span> <span style="color: black;">&#91;</span><span style="color: #008000;">split</span> <span style="color: #ff3333;">&#36;uhost</span> <span style="color: #483d8b;">&quot;@&quot;</span><span style="color: black;">&#93;</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
  putserv <span style="color: #483d8b;">&quot;MODE &#36;chan +b *!&#36;uident@*&quot;</span>
      putquick <span style="color: #483d8b;">&quot;PRIVMSG chanserv ban &#36;chan &#36;vnick Pas de pub pour les applications. (&#36;nick)&quot;</span>
  putquick <span style="color: #483d8b;">&quot;PRIVMSG BOTSERV say &#36;chan Info: &#36;vnick est banni(e) de &#36;chan pour la raison suivante: Publicité Interdite. (Par &#36;nick)&quot;</span>
  putquick <span style="color: #483d8b;">&quot;PRIVMSG #Back-Tentation KickBan Applications Pseudo: &#36;vnick sur &#36;chan par &#36;nick&quot;</span>
  <span style="color: #ff7700;font-weight:bold;">return</span>
  <span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">else</span> <span style="color: black;">&#123;</span>
      puthelp <span style="color: #483d8b;">&quot;NOTICE &#36;nick Pseudo Incorrecte&quot;</span>
      <span style="color: #ff7700;font-weight:bold;">return</span>
  <span style="color: black;">&#125;</span></pre></code></div></div><br /><br />
}<br />
<br />
Si quelqu'un trouve l'erreur ou veut bien m'aider/guider..<br />
Merci d'avance !]]></description>
			<content:encoded><![CDATA[Bonjour,<br />
 <br />
Je laisse un message pour une aide concernant mon tcl<br />
Il bannit bien l'host, mais, je cherche a bannir l'ident également sous forme : *!blabla@*<br />
Dans ce que je vais vous mettre ci-dessous, il bannit mon propre ident.<br />
<br />
<div class="codeblock"><div class="title">tcl<button class="copy">copier</button></div><div class="body"><code><pre class="tcl" style="font-family:monospace;">bind pub - <span style="color: #66cc66;">!</span>kbapp kbapp
<span style="color: #ff7700;font-weight:bold;">proc</span> kbapp <span style="color: black;">&#123;</span>nick uhost handle chan args<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
  <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span>isop <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">&amp;&amp;</span> <span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span>ishalfop <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> putquick <span style="color: #483d8b;">&quot;NOTICE &#36;nick tu n'as pas accés à cette commande&quot;</span><span style="color: #66cc66;">;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span>
  <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span><span style="color: #008000;">lindex</span> <span style="color: #ff3333;">&#36;args</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">!</span>=<span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
      <span style="color: #ff7700;font-weight:bold;">set</span> vnick <span style="color: black;">&#91;</span><span style="color: #008000;">lindex</span> <span style="color: #ff3333;">&#36;args</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
      <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span>onchan <span style="color: #ff3333;">&#36;vnick</span> <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> putquick <span style="color: #483d8b;">&quot;NOTICE &#36;nick :<span style="color: #000099; font-weight: bold;">&#092;0</span>0312 [Erreur] &#36;vnick n'est pas sur &#36;chan&quot;</span><span style="color: #66cc66;">;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span>
      <span style="color: #ff7700;font-weight:bold;">set</span> vhost <span style="color: black;">&#91;</span><span style="color: #008000;">lindex</span> <span style="color: black;">&#91;</span><span style="color: #008000;">split</span> <span style="color: black;">&#91;</span>getchanhost <span style="color: #ff3333;">&#36;vnick</span> <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span> <span style="color: #483d8b;">&quot;@&quot;</span><span style="color: black;">&#93;</span> <span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
  <span style="color: #ff7700;font-weight:bold;">set</span> uident <span style="color: black;">&#91;</span><span style="color: #008000;">string</span> trimleft <span style="color: black;">&#91;</span><span style="color: #008000;">lindex</span> <span style="color: black;">&#91;</span><span style="color: #008000;">split</span> <span style="color: #ff3333;">&#36;uhost</span> <span style="color: #483d8b;">&quot;@&quot;</span><span style="color: black;">&#93;</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
  putserv <span style="color: #483d8b;">&quot;MODE &#36;chan +b *!&#36;uident@*&quot;</span>
      putquick <span style="color: #483d8b;">&quot;PRIVMSG chanserv ban &#36;chan &#36;vnick Pas de pub pour les applications. (&#36;nick)&quot;</span>
  putquick <span style="color: #483d8b;">&quot;PRIVMSG BOTSERV say &#36;chan Info: &#36;vnick est banni(e) de &#36;chan pour la raison suivante: Publicité Interdite. (Par &#36;nick)&quot;</span>
  putquick <span style="color: #483d8b;">&quot;PRIVMSG #Back-Tentation KickBan Applications Pseudo: &#36;vnick sur &#36;chan par &#36;nick&quot;</span>
  <span style="color: #ff7700;font-weight:bold;">return</span>
  <span style="color: black;">&#125;</span> <span style="color: #ff7700;font-weight:bold;">else</span> <span style="color: black;">&#123;</span>
      puthelp <span style="color: #483d8b;">&quot;NOTICE &#36;nick Pseudo Incorrecte&quot;</span>
      <span style="color: #ff7700;font-weight:bold;">return</span>
  <span style="color: black;">&#125;</span></pre></code></div></div><br /><br />
}<br />
<br />
Si quelqu'un trouve l'erreur ou veut bien m'aider/guider..<br />
Merci d'avance !]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Subtilité de matchattr]]></title>
			<link>https://forum.eggdrop.fr/showthread.php?tid=1793</link>
			<pubDate>Tue, 28 May 2024 06:24:42 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.eggdrop.fr/member.php?action=profile&uid=2">CrazyCat</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.eggdrop.fr/showthread.php?tid=1793</guid>
			<description><![CDATA[Hello :)<br />
<br />
J'ai découvert il y a peu de temps une petite subtilité de matchattr qui pourrait s'avérer gênante si on y prend pas garde.<br />
On m'avait demandé un script qui doit agir si la personne n'a pas d'accès halfop (ou plus) sur un canal (ou de manière globale).<br />
Il y avait donc dans la procédure:<br />
<div class="codeblock"><div class="title">tcl<button class="copy">copier</button></div><div class="body"><code><pre class="tcl" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span>matchattr <span style="color: #ff3333;">&#36;handle</span> -l<span style="color: #66cc66;">&amp;</span>-l <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span></pre></code></div></div><br /><br />
Donc en toute logique, on s'attend à obtenir 1 si la personne n'a ni d'accès halfop sur l'eggdrop ni sur le canal visé.<br />
<br />
Sauf que... Si l'utilisateur est inconnu (&#36;handle *), la procédure matchattr retourne 0, donc pour le script cette personne a un accès.<br />
<br />
Il faut donc <span style="font-weight: bold;" class="mycode_b">toujours</span> vérifier que l'utilisateur existe lorsqu'on travaille avec des absences de flags:<br />
<div class="codeblock"><div class="title">tcl<button class="copy">copier</button></div><div class="body"><code><pre class="tcl" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;handle</span> ne <span style="color: #483d8b;">&quot;*&quot;</span> <span style="color: #66cc66;">&amp;&amp;</span> <span style="color: black;">&#91;</span>matchattr <span style="color: #ff3333;">&#36;handle</span> -l<span style="color: #66cc66;">&amp;</span>-l <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span></pre></code></div></div><br /><br />
<br />
J'ai ouvert une <a href="https://github.com/eggheads/eggdrop/issues/1588" target="_blank" rel="noopener" class="mycode_url">issue</a> et proposé une <a href="https://github.com/eggheads/eggdrop/pull/1589" target="_blank" rel="noopener" class="mycode_url">PR</a> pour que matchattr retourne -1 plutôt que 0 si l'utilisateur est inconnu.]]></description>
			<content:encoded><![CDATA[Hello :)<br />
<br />
J'ai découvert il y a peu de temps une petite subtilité de matchattr qui pourrait s'avérer gênante si on y prend pas garde.<br />
On m'avait demandé un script qui doit agir si la personne n'a pas d'accès halfop (ou plus) sur un canal (ou de manière globale).<br />
Il y avait donc dans la procédure:<br />
<div class="codeblock"><div class="title">tcl<button class="copy">copier</button></div><div class="body"><code><pre class="tcl" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: black;">&#91;</span>matchattr <span style="color: #ff3333;">&#36;handle</span> -l<span style="color: #66cc66;">&amp;</span>-l <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span></pre></code></div></div><br /><br />
Donc en toute logique, on s'attend à obtenir 1 si la personne n'a ni d'accès halfop sur l'eggdrop ni sur le canal visé.<br />
<br />
Sauf que... Si l'utilisateur est inconnu (&#36;handle *), la procédure matchattr retourne 0, donc pour le script cette personne a un accès.<br />
<br />
Il faut donc <span style="font-weight: bold;" class="mycode_b">toujours</span> vérifier que l'utilisateur existe lorsqu'on travaille avec des absences de flags:<br />
<div class="codeblock"><div class="title">tcl<button class="copy">copier</button></div><div class="body"><code><pre class="tcl" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;handle</span> ne <span style="color: #483d8b;">&quot;*&quot;</span> <span style="color: #66cc66;">&amp;&amp;</span> <span style="color: black;">&#91;</span>matchattr <span style="color: #ff3333;">&#36;handle</span> -l<span style="color: #66cc66;">&amp;</span>-l <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span></pre></code></div></div><br /><br />
<br />
J'ai ouvert une <a href="https://github.com/eggheads/eggdrop/issues/1588" target="_blank" rel="noopener" class="mycode_url">issue</a> et proposé une <a href="https://github.com/eggheads/eggdrop/pull/1589" target="_blank" rel="noopener" class="mycode_url">PR</a> pour que matchattr retourne -1 plutôt que 0 si l'utilisateur est inconnu.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Module MySQL]]></title>
			<link>https://forum.eggdrop.fr/showthread.php?tid=1789</link>
			<pubDate>Wed, 01 May 2024 13:27:02 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.eggdrop.fr/member.php?action=profile&uid=2">CrazyCat</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.eggdrop.fr/showthread.php?tid=1789</guid>
			<description><![CDATA[<a href="https://github.com/michaelortmann" target="_blank" rel="noopener" class="mycode_url">Michael Ortmann</a> a adapté le module MySQL (initialement créé par BarkerJr) pour pouvoir utiliser MySQL sans avoir à charger le package TCL.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Pour l'installer</span><br />
Pré-requis: libmysqlclient-dev<br />
<ol type="1" class="mycode_list"><li>Téléchargez le module <a href="https://scripts.eggdrop.fr/details-MySQL-s266.html" target="_blank" rel="noopener" class="mycode_url">depuis nos scripts</a> ou <a href="https://github.com/michaelortmann/mysql.mod" target="_blank" rel="noopener" class="mycode_url">sur le github</a><br />
</li>
<li>Placez le dans ~/eggdrop-1.9.5/src/mod/<br />
</li>
<li>Décompressez le module<br />
</li>
<li>Recompilez eggdrop (<code class="inline-code">cd ~/eggdrop-1.9.5/ &amp; ./configure &amp; make config &amp; make &amp; make install</code>)<br />
</li>
<li>Ajoutez <code class="inline-code">loadmodule mysql</code> à votre fichier .conf<br />
</li>
<li>Rehashez l'eggdrop<br />
</li>
</ol>
<br />
<span style="font-weight: bold;" class="mycode_b">Commandes accessibles en TCL</span><ul class="mycode_list"><li>mysql_connect &lt;database&gt; &lt;hostname&gt; [user] [password] [socket|port]<br />
</li>
<li>mysql_close<br />
</li>
<li>mysql_query &lt;query&gt;<br />
</li>
<li>mysql_escape [byte] &lt;string&gt;<br />
</li>
<li>mysql_errno<br />
</li>
<li>mysql_ping<br />
</li>
<li>mysql_connectioninfo<br />
</li>
<li>mysql_insert_id<br />
</li>
<li>mysql_connected<br />
</li>
<li>mysql_affected_rows<br />
</li>
</ul>
]]></description>
			<content:encoded><![CDATA[<a href="https://github.com/michaelortmann" target="_blank" rel="noopener" class="mycode_url">Michael Ortmann</a> a adapté le module MySQL (initialement créé par BarkerJr) pour pouvoir utiliser MySQL sans avoir à charger le package TCL.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Pour l'installer</span><br />
Pré-requis: libmysqlclient-dev<br />
<ol type="1" class="mycode_list"><li>Téléchargez le module <a href="https://scripts.eggdrop.fr/details-MySQL-s266.html" target="_blank" rel="noopener" class="mycode_url">depuis nos scripts</a> ou <a href="https://github.com/michaelortmann/mysql.mod" target="_blank" rel="noopener" class="mycode_url">sur le github</a><br />
</li>
<li>Placez le dans ~/eggdrop-1.9.5/src/mod/<br />
</li>
<li>Décompressez le module<br />
</li>
<li>Recompilez eggdrop (<code class="inline-code">cd ~/eggdrop-1.9.5/ &amp; ./configure &amp; make config &amp; make &amp; make install</code>)<br />
</li>
<li>Ajoutez <code class="inline-code">loadmodule mysql</code> à votre fichier .conf<br />
</li>
<li>Rehashez l'eggdrop<br />
</li>
</ol>
<br />
<span style="font-weight: bold;" class="mycode_b">Commandes accessibles en TCL</span><ul class="mycode_list"><li>mysql_connect &lt;database&gt; &lt;hostname&gt; [user] [password] [socket|port]<br />
</li>
<li>mysql_close<br />
</li>
<li>mysql_query &lt;query&gt;<br />
</li>
<li>mysql_escape [byte] &lt;string&gt;<br />
</li>
<li>mysql_errno<br />
</li>
<li>mysql_ping<br />
</li>
<li>mysql_connectioninfo<br />
</li>
<li>mysql_insert_id<br />
</li>
<li>mysql_connected<br />
</li>
<li>mysql_affected_rows<br />
</li>
</ul>
]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[VDM]]></title>
			<link>https://forum.eggdrop.fr/showthread.php?tid=1784</link>
			<pubDate>Sun, 25 Feb 2024 15:22:44 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.eggdrop.fr/member.php?action=profile&uid=2024">pheeric</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.eggdrop.fr/showthread.php?tid=1784</guid>
			<description><![CDATA[Bonjour à tous et même si en retard une bonne année 2024 (certes déjà bien entamée) <br />
<br />
J'ai recherché ces derniers temps le VDM, mais me bug toujours :<br />
"Aucune information identifiable n'a pu être récupérée. Le site rencontre peut-être un problème ou bien le layout du site a changé. VDM."<br />
<br />
J'ai regardé les liens et adresses, elels semblent correctes, ou j']]></description>
			<content:encoded><![CDATA[Bonjour à tous et même si en retard une bonne année 2024 (certes déjà bien entamée) <br />
<br />
J'ai recherché ces derniers temps le VDM, mais me bug toujours :<br />
"Aucune information identifiable n'a pu être récupérée. Le site rencontre peut-être un problème ou bien le layout du site a changé. VDM."<br />
<br />
J'ai regardé les liens et adresses, elels semblent correctes, ou j']]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Problème de liste avec une requête sql]]></title>
			<link>https://forum.eggdrop.fr/showthread.php?tid=1779</link>
			<pubDate>Wed, 14 Feb 2024 05:57:02 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.eggdrop.fr/member.php?action=profile&uid=3843">Amand</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.eggdrop.fr/showthread.php?tid=1779</guid>
			<description><![CDATA[J'ai une condition qui fait une requête sql pour retourner une erreur si l'utilisateur a déjà un accès dans un autre channel:<br />
<br />
<div class="codeblock"><div class="title">tcl<button class="copy">copier</button></div><div class="body"><code><pre class="tcl" style="font-family:monospace;">::<span style="color: black;">certUser</span>::<span style="color: black;">service</span>:connect
<span style="color: #ff7700;font-weight:bold;">set</span> res <span style="color: black;">&#91;</span>mysqlsel <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">mysqlink</span> <span style="color: #483d8b;">&quot;SELECT count(*),salon FROM `voiceauto` WHERE pseudo='&#36;pseudo'&quot;</span> -<span style="color: #008000;">list</span><span style="color: black;">&#93;</span>
putlog <span style="color: #483d8b;">&quot;res =&gt; &#36;res&quot;</span>
<span style="color: #ff7700;font-weight:bold;">set</span> nb <span style="color: black;">&#91;</span><span style="color: #008000;">lindex</span> <span style="color: #ff3333;">&#36;res</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
putlog <span style="color: #483d8b;">&quot;nb =&gt; &#36;nb&quot;</span>
<span style="color: #ff7700;font-weight:bold;">set</span> otherchan <span style="color: black;">&#91;</span><span style="color: #008000;">lindex</span> <span style="color: #ff3333;">&#36;res</span> <span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
putlog <span style="color: #483d8b;">&quot;otherchan =&gt; &#36;otherchan&quot;</span>
::<span style="color: black;">certUser</span>::<span style="color: black;">service</span>:deconnect</pre></code></div></div><br /><br />
<br />
J'ai un problème pour récupérer les lindex, le putlog me retourne :<br />
<br />
<blockquote class="mycode_quote"><cite>Citation :</cite>[06:52:03] res =&gt; {1 #test}<br />
[06:52:03] nb =&gt; 1 #test<br />
[06:52:03] otherchan =&gt;</blockquote>
<br />
<br />
normalement &#36;nb devrait me retourner <span style="font-weight: bold;" class="mycode_b">1</span> et &#36;otherchan <span style="font-weight: bold;" class="mycode_b">#test</span>]]></description>
			<content:encoded><![CDATA[J'ai une condition qui fait une requête sql pour retourner une erreur si l'utilisateur a déjà un accès dans un autre channel:<br />
<br />
<div class="codeblock"><div class="title">tcl<button class="copy">copier</button></div><div class="body"><code><pre class="tcl" style="font-family:monospace;">::<span style="color: black;">certUser</span>::<span style="color: black;">service</span>:connect
<span style="color: #ff7700;font-weight:bold;">set</span> res <span style="color: black;">&#91;</span>mysqlsel <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">mysqlink</span> <span style="color: #483d8b;">&quot;SELECT count(*),salon FROM `voiceauto` WHERE pseudo='&#36;pseudo'&quot;</span> -<span style="color: #008000;">list</span><span style="color: black;">&#93;</span>
putlog <span style="color: #483d8b;">&quot;res =&gt; &#36;res&quot;</span>
<span style="color: #ff7700;font-weight:bold;">set</span> nb <span style="color: black;">&#91;</span><span style="color: #008000;">lindex</span> <span style="color: #ff3333;">&#36;res</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
putlog <span style="color: #483d8b;">&quot;nb =&gt; &#36;nb&quot;</span>
<span style="color: #ff7700;font-weight:bold;">set</span> otherchan <span style="color: black;">&#91;</span><span style="color: #008000;">lindex</span> <span style="color: #ff3333;">&#36;res</span> <span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
putlog <span style="color: #483d8b;">&quot;otherchan =&gt; &#36;otherchan&quot;</span>
::<span style="color: black;">certUser</span>::<span style="color: black;">service</span>:deconnect</pre></code></div></div><br /><br />
<br />
J'ai un problème pour récupérer les lindex, le putlog me retourne :<br />
<br />
<blockquote class="mycode_quote"><cite>Citation :</cite>[06:52:03] res =&gt; {1 #test}<br />
[06:52:03] nb =&gt; 1 #test<br />
[06:52:03] otherchan =&gt;</blockquote>
<br />
<br />
normalement &#36;nb devrait me retourner <span style="font-weight: bold;" class="mycode_b">1</span> et &#36;otherchan <span style="font-weight: bold;" class="mycode_b">#test</span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[fonction channel get]]></title>
			<link>https://forum.eggdrop.fr/showthread.php?tid=1778</link>
			<pubDate>Wed, 14 Feb 2024 05:47:17 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.eggdrop.fr/member.php?action=profile&uid=3843">Amand</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.eggdrop.fr/showthread.php?tid=1778</guid>
			<description><![CDATA[Hello à tous, <br />
<br />
j'ai fait une procédure :<br />
<br />
<div class="codeblock"><div class="title">tcl<button class="copy">copier</button></div><div class="body"><code><pre class="tcl" style="font-family:monospace;">bind msg o|o addc ::<span style="color: black;">certUser</span>::<span style="color: black;">addc</span>
<span style="color: #ff7700;font-weight:bold;">proc</span> ::<span style="color: black;">certUser</span>::<span style="color: black;">addc</span> <span style="color: black;">&#123;</span> nick host hand arg <span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">set</span> pseudo <span style="color: black;">&#91;</span><span style="color: #008000;">lindex</span> <span style="color: #ff3333;">&#36;arg</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
<span style="color: #ff7700;font-weight:bold;">set</span> chan <span style="color: black;">&#91;</span><span style="color: #008000;">lindex</span> <span style="color: #ff3333;">&#36;arg</span> <span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span>channel get <span style="color: #ff3333;">&#36;chan</span> cert<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
<span style="color: #ff7700;font-weight:bold;">return</span>
<span style="color: black;">&#125;</span>
&nbsp;
...
&nbsp;
<span style="color: black;">&#125;</span></pre></code></div></div><br /><br />
<br />
quand j'écris un chan qui n'est pas en mode cert, le bot me retourne :<br />
<br />
[06:33:13] Tcl error [::certUser::addc]: no such channel record<br />
<br />
Normalement, il devrait faire un return, quand le channel mis dans la cmds n'a pas le mode ?<br />
<br />
Ou ça veut dire que le channel n'existe pas auprès de l'eggdrop du coup il ne peut pas vérifier si le channel a le mode ou pas?]]></description>
			<content:encoded><![CDATA[Hello à tous, <br />
<br />
j'ai fait une procédure :<br />
<br />
<div class="codeblock"><div class="title">tcl<button class="copy">copier</button></div><div class="body"><code><pre class="tcl" style="font-family:monospace;">bind msg o|o addc ::<span style="color: black;">certUser</span>::<span style="color: black;">addc</span>
<span style="color: #ff7700;font-weight:bold;">proc</span> ::<span style="color: black;">certUser</span>::<span style="color: black;">addc</span> <span style="color: black;">&#123;</span> nick host hand arg <span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">set</span> pseudo <span style="color: black;">&#91;</span><span style="color: #008000;">lindex</span> <span style="color: #ff3333;">&#36;arg</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
<span style="color: #ff7700;font-weight:bold;">set</span> chan <span style="color: black;">&#91;</span><span style="color: #008000;">lindex</span> <span style="color: #ff3333;">&#36;arg</span> <span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span>channel get <span style="color: #ff3333;">&#36;chan</span> cert<span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
<span style="color: #ff7700;font-weight:bold;">return</span>
<span style="color: black;">&#125;</span>
&nbsp;
...
&nbsp;
<span style="color: black;">&#125;</span></pre></code></div></div><br /><br />
<br />
quand j'écris un chan qui n'est pas en mode cert, le bot me retourne :<br />
<br />
[06:33:13] Tcl error [::certUser::addc]: no such channel record<br />
<br />
Normalement, il devrait faire un return, quand le channel mis dans la cmds n'a pas le mode ?<br />
<br />
Ou ça veut dire que le channel n'existe pas auprès de l'eggdrop du coup il ne peut pas vérifier si le channel a le mode ou pas?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[subtilités de getaccount]]></title>
			<link>https://forum.eggdrop.fr/showthread.php?tid=1777</link>
			<pubDate>Thu, 08 Feb 2024 10:29:24 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.eggdrop.fr/member.php?action=profile&uid=2">CrazyCat</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.eggdrop.fr/showthread.php?tid=1777</guid>
			<description><![CDATA[Pour faire suite au souci sur isidentified, nous avons poussé les tests.<br />
<br />
Résumé du problème: un utilisateur identifié rejoint le canal, le getaccount renvoie la bonne valeur. Si l'utilisateur s'identifie après être entré, getaccount retourne *<br />
<br />
Tests:<br />
<div class="codeblock"><div class="title">tcl<button class="copy">copier</button></div><div class="body"><code><pre class="tcl" style="font-family:monospace;">bind account - <span style="color: #66cc66;">*</span> accountuser
<span style="color: #ff7700;font-weight:bold;">proc</span> accountuser <span style="color: black;">&#123;</span>nick uhost hand chan <span style="color: black;">&#123;</span>account <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#125;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
   putlog <span style="color: #483d8b;">&quot;*** account =&gt; &#36;account vs [getaccount &#36;nick &#36;chan]&quot;</span>
   principale <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;uhost</span> <span style="color: #ff3333;">&#36;chan</span>
<span style="color: black;">&#125;</span>
<span style="color: #ff7700;font-weight:bold;">proc</span> principale <span style="color: black;">&#123;</span>nick uhost chan<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
   putlog <span style="color: #483d8b;">&quot;*** principale =&gt; getaccount &#36;nick &#36;chan = [getaccount &#36;nick &#36;chan]&quot;</span>
   <span style="color: #ff7700;font-weight:bold;">return</span>
<span style="color: black;">&#125;</span></pre></code></div></div><br /><br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>[10:56] test0r!toto@toto.vhost.fr has logged out of their account<br />
[10:56] *** account =&gt; * vs toto<br />
[10:56] *** principale =&gt; getaccount test0r #test = toto<br />
<br />
[10:56] test0r!toto@toto.vhost.fr logged in to their account toto<br />
[10:56] *** account =&gt; toto vs *<br />
[10:56] *** principale =&gt; getaccount test0r #test = *</code></div></div><br />
Ce que l'on voit, c'est que <span style="font-weight: bold;" class="mycode_b">getaccount retourne le compte de la personne ayant déclenché</span> le bind en non pas le compte après l'identification (ou le logout). Par contre, l'argument &#36;account est bien le nouveau.<br />
<br />
Cela signifie que si vous avez une procédure qui doit réagir à une (dés)identification et travailler avec le nouveau compte, vous ne devez pas utiliser getaccount mais &#36;account.]]></description>
			<content:encoded><![CDATA[Pour faire suite au souci sur isidentified, nous avons poussé les tests.<br />
<br />
Résumé du problème: un utilisateur identifié rejoint le canal, le getaccount renvoie la bonne valeur. Si l'utilisateur s'identifie après être entré, getaccount retourne *<br />
<br />
Tests:<br />
<div class="codeblock"><div class="title">tcl<button class="copy">copier</button></div><div class="body"><code><pre class="tcl" style="font-family:monospace;">bind account - <span style="color: #66cc66;">*</span> accountuser
<span style="color: #ff7700;font-weight:bold;">proc</span> accountuser <span style="color: black;">&#123;</span>nick uhost hand chan <span style="color: black;">&#123;</span>account <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#125;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
   putlog <span style="color: #483d8b;">&quot;*** account =&gt; &#36;account vs [getaccount &#36;nick &#36;chan]&quot;</span>
   principale <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;uhost</span> <span style="color: #ff3333;">&#36;chan</span>
<span style="color: black;">&#125;</span>
<span style="color: #ff7700;font-weight:bold;">proc</span> principale <span style="color: black;">&#123;</span>nick uhost chan<span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
   putlog <span style="color: #483d8b;">&quot;*** principale =&gt; getaccount &#36;nick &#36;chan = [getaccount &#36;nick &#36;chan]&quot;</span>
   <span style="color: #ff7700;font-weight:bold;">return</span>
<span style="color: black;">&#125;</span></pre></code></div></div><br /><br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>[10:56] test0r!toto@toto.vhost.fr has logged out of their account<br />
[10:56] *** account =&gt; * vs toto<br />
[10:56] *** principale =&gt; getaccount test0r #test = toto<br />
<br />
[10:56] test0r!toto@toto.vhost.fr logged in to their account toto<br />
[10:56] *** account =&gt; toto vs *<br />
[10:56] *** principale =&gt; getaccount test0r #test = *</code></div></div><br />
Ce que l'on voit, c'est que <span style="font-weight: bold;" class="mycode_b">getaccount retourne le compte de la personne ayant déclenché</span> le bind en non pas le compte après l'identification (ou le logout). Par contre, l'argument &#36;account est bien le nouveau.<br />
<br />
Cela signifie que si vous avez une procédure qui doit réagir à une (dés)identification et travailler avec le nouveau compte, vous ne devez pas utiliser getaccount mais &#36;account.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Fonction isidentified]]></title>
			<link>https://forum.eggdrop.fr/showthread.php?tid=1776</link>
			<pubDate>Wed, 07 Feb 2024 21:12:49 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.eggdrop.fr/member.php?action=profile&uid=3843">Amand</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.eggdrop.fr/showthread.php?tid=1776</guid>
			<description><![CDATA[J'ai une condition dans une procédure qui doit s'effectuer quand l'utilisateur est identifié auprès de NickServ:<br />
<br />
<div class="codeblock"><div class="title">tcl<button class="copy">copier</button></div><div class="body"><code><pre class="tcl" style="font-family:monospace;">bind <span style="color: #008000;">join</span> - <span style="color: #66cc66;">*</span> <span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">namespace</span> current<span style="color: black;">&#93;</span>::<span style="color: black;">joincertif</span>
<span style="color: #ff7700;font-weight:bold;">proc</span> joincertif <span style="color: black;">&#123;</span> nick host hand chan <span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
lassign <span style="color: black;">&#91;</span><span style="color: #008000;">split</span> <span style="color: #ff3333;">&#36;host</span> <span style="color: #483d8b;">&quot;@&quot;</span><span style="color: black;">&#93;</span> ident uhost
&nbsp;
putlog <span style="color: #483d8b;">&quot;isidentified =&gt; &#36;nick = [isidentified &#36;nick]&quot;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span>isidentified <span style="color: #ff3333;">&#36;nick</span><span style="color: black;">&#93;</span> || <span style="color: black;">&#91;</span>isvoice <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#125;</span>
&nbsp;
::<span style="color: black;">certUser</span>::<span style="color: black;">service</span>:connect
<span style="color: #ff7700;font-weight:bold;">set</span> res <span style="color: black;">&#91;</span>mysqlsel <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">mysqlink</span> <span style="color: #483d8b;">&quot;SELECT count(*) FROM `voiceauto` WHERE pseudo='&#36;nick' and salon='&#36;chan'&quot;</span> -<span style="color: #008000;">list</span><span style="color: black;">&#93;</span>
<span style="color: #ff7700;font-weight:bold;">set</span> nb <span style="color: black;">&#91;</span><span style="color: #008000;">lindex</span> <span style="color: #ff3333;">&#36;res</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;nb</span> <span style="color: #66cc66;">&gt;</span>= <span style="color: #ff4500;">1</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
putserv <span style="color: #483d8b;">&quot;PRIVMSG ChanServ voice &#36;chan &#36;nick&quot;</span>
<span style="color: black;">&#125;</span>
::<span style="color: black;">certUser</span>::<span style="color: black;">service</span>:deconnect
&nbsp;
<span style="color: black;">&#125;</span></pre></code></div></div><br /><br />
<br />
La problématique est que la fonction isidentified renvoie 1 même quand l'user est présent sur le canal et qu'il n'est pas identifié ou register.]]></description>
			<content:encoded><![CDATA[J'ai une condition dans une procédure qui doit s'effectuer quand l'utilisateur est identifié auprès de NickServ:<br />
<br />
<div class="codeblock"><div class="title">tcl<button class="copy">copier</button></div><div class="body"><code><pre class="tcl" style="font-family:monospace;">bind <span style="color: #008000;">join</span> - <span style="color: #66cc66;">*</span> <span style="color: black;">&#91;</span><span style="color: #ff7700;font-weight:bold;">namespace</span> current<span style="color: black;">&#93;</span>::<span style="color: black;">joincertif</span>
<span style="color: #ff7700;font-weight:bold;">proc</span> joincertif <span style="color: black;">&#123;</span> nick host hand chan <span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
&nbsp;
lassign <span style="color: black;">&#91;</span><span style="color: #008000;">split</span> <span style="color: #ff3333;">&#36;host</span> <span style="color: #483d8b;">&quot;@&quot;</span><span style="color: black;">&#93;</span> ident uhost
&nbsp;
putlog <span style="color: #483d8b;">&quot;isidentified =&gt; &#36;nick = [isidentified &#36;nick]&quot;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #66cc66;">!</span><span style="color: black;">&#91;</span>isidentified <span style="color: #ff3333;">&#36;nick</span><span style="color: black;">&#93;</span> || <span style="color: black;">&#91;</span>isvoice <span style="color: #ff3333;">&#36;nick</span> <span style="color: #ff3333;">&#36;chan</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span> <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#125;</span>
&nbsp;
::<span style="color: black;">certUser</span>::<span style="color: black;">service</span>:connect
<span style="color: #ff7700;font-weight:bold;">set</span> res <span style="color: black;">&#91;</span>mysqlsel <span style="color: #66cc66;">&#36;</span>::<span style="color: black;">mysqlink</span> <span style="color: #483d8b;">&quot;SELECT count(*) FROM `voiceauto` WHERE pseudo='&#36;nick' and salon='&#36;chan'&quot;</span> -<span style="color: #008000;">list</span><span style="color: black;">&#93;</span>
<span style="color: #ff7700;font-weight:bold;">set</span> nb <span style="color: black;">&#91;</span><span style="color: #008000;">lindex</span> <span style="color: #ff3333;">&#36;res</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#123;</span><span style="color: #ff3333;">&#36;nb</span> <span style="color: #66cc66;">&gt;</span>= <span style="color: #ff4500;">1</span><span style="color: black;">&#125;</span> <span style="color: black;">&#123;</span>
putserv <span style="color: #483d8b;">&quot;PRIVMSG ChanServ voice &#36;chan &#36;nick&quot;</span>
<span style="color: black;">&#125;</span>
::<span style="color: black;">certUser</span>::<span style="color: black;">service</span>:deconnect
&nbsp;
<span style="color: black;">&#125;</span></pre></code></div></div><br /><br />
<br />
La problématique est que la fonction isidentified renvoie 1 même quand l'user est présent sur le canal et qu'il n'est pas identifié ou register.]]></content:encoded>
		</item>
	</channel>
</rss>