Maison >interface Web >js tutoriel >Créer un robot évolutif de modération des discours anti-haine pour Telegram : une analyse approfondie
Gérer un groupe Telegram comptant 3 000 membres ne consiste pas seulement à augmenter le nombre, il s'agit également de favoriser une communauté sûre et respectueuse. Après avoir été confronté à des cas répétés de discours de haine, j'ai développé un robot de modération basé sur Node.js qui identifie et restreint automatiquement les utilisateurs publiant des insultes racistes. Dans cet article, je vais vous guider tout au long du processus de développement, de la conception au déploiement.
La modération manuelle d'un grand groupe Telegram présente plusieurs défis :
Tout d'abord, nous avons configuré la structure de base du bot avec une gestion appropriée des erreurs :
const TelegramBot = require('node-telegram-bot-api'); const express = require('express'); const bodyParser = require('body-parser'); const dotenv = require('dotenv'); const logging = require('console'); dotenv.config(); const BOT_TOKEN = process.env.BOT_TOKEN; const bot = new TelegramBot(BOT_TOKEN, { polling: true });
Le bot met en œuvre un système de surveillance multicouche :
bot.on('message', async (msg) => { if (!msg.chat || !msg.from) return; // Message processing logic });
function checkForRacialSlurs(message) { if (!message) return false; return RACIAL_SLURS.some(slur => message.toLowerCase().includes(slur) ); }
async function restrictUser(chatId, userId) { try { await bot.restrictChatMember(chatId, userId, { permissions: { can_send_messages: false, can_send_media_messages: false, can_send_polls: false, can_send_other_messages: false, can_add_web_page_previews: false, can_change_info: false, can_invite_users: false, can_pin_messages: false, }, }); return true; } catch (error) { logging.error('Restriction failed:', error); return false; } }
Le bot comprend un système de présentation du personnel pour un accès facile aux informations du modérateur :
const STAFF_LAYOUT = ` <b>GROUP STAFF</b> ? <b>Founder</b> └ @Sixademiks ⚜️ <b>Verified Vendors</b> ├ @Vendor1 (City1) └ @Vendor2 (City2) `;
Les nouveaux utilisateurs reçoivent un message de bienvenue formaté avec analyse HTML :
bot.onText(/\/start/, async (msg) => { try { const welcomeMessage = ` <b>Welcome to the DirtyNewz Bot!</b> Please read the <b>pinned messages</b> for the group rules...`; await bot.sendMessage(msg.chat.id, welcomeMessage, { parse_mode: 'HTML' }); } catch (error) { logging.error("Error in /start:", error); } });
Une journalisation complète permet de suivre les performances des robots et les violations des utilisateurs :
logging.log('User was restricted due to violation'); logging.error('Error during restriction:', error);
Après avoir déployé le bot dans notre groupe de 5 000 membres, nous avons observé :
Au départ, nous atteignions les limites de débit de Telegram pendant les périodes de fort trafic. Solution :
const rateLimiter = { messageCount: 0, lastReset: Date.now(), check: function() { if (Date.now() - this.lastReset > 1000) { this.messageCount = 0; this.lastReset = Date.now(); } return this.messageCount++ < 30; } };
Une gestion robuste des erreurs empêche les plantages du bot :
process.on('unhandledRejection', (reason, promise) => { logging.error('Unhandled Rejection at:', promise, 'reason:', reason); }); bot.on('polling_error', (error) => { logging.error('Polling error:', error); }); <h3> 3. Traitement des messages </h3> <p>Traitement efficace des messages pour gérer un volume élevé :<br> </p> <pre class="brush:php;toolbar:false">const TelegramBot = require('node-telegram-bot-api'); const express = require('express'); const bodyParser = require('body-parser'); const dotenv = require('dotenv'); const logging = require('console'); dotenv.config(); const BOT_TOKEN = process.env.BOT_TOKEN; const bot = new TelegramBot(BOT_TOKEN, { polling: true });
Le bot est déployé sur un serveur Linux utilisant PM2 pour la gestion des processus :
bot.on('message', async (msg) => { if (!msg.chat || !msg.from) return; // Message processing logic });
Une surveillance régulière est cruciale :
function checkForRacialSlurs(message) { if (!message) return false; return RACIAL_SLURS.some(slur => message.toLowerCase().includes(slur) ); }
async function restrictUser(chatId, userId) { try { await bot.restrictChatMember(chatId, userId, { permissions: { can_send_messages: false, can_send_media_messages: false, can_send_polls: false, can_send_other_messages: false, can_add_web_page_previews: false, can_change_info: false, can_invite_users: false, can_pin_messages: false, }, }); return true; } catch (error) { logging.error('Restriction failed:', error); return false; } }
const STAFF_LAYOUT = ` <b>GROUP STAFF</b> ? <b>Founder</b> └ @Sixademiks ⚜️ <b>Verified Vendors</b> ├ @Vendor1 (City1) └ @Vendor2 (City2) `;
bot.onText(/\/start/, async (msg) => { try { const welcomeMessage = ` <b>Welcome to the DirtyNewz Bot!</b> Please read the <b>pinned messages</b> for the group rules...`; await bot.sendMessage(msg.chat.id, welcomeMessage, { parse_mode: 'HTML' }); } catch (error) { logging.error("Error in /start:", error); } });
La création d'un robot de modération pour un grand groupe Telegram a permis d'acquérir de précieuses leçons sur l'évolutivité, la gestion des erreurs et la gestion de la communauté. Le bot a considérablement amélioré l'environnement de notre groupe tout en réduisant la charge de travail du modérateur.
N'oubliez pas qu'une modération efficace consiste à trouver le bon équilibre entre les systèmes automatisés et la surveillance humaine. Bien que ce bot gère la première ligne de défense, il est conçu pour compléter, et non remplacer, les modérateurs humains.
N'hésitez pas à nous poser des questions ou à consulter le code complet sur mon GitHub !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!