Блог

Антиспам бот для телеграмм. Восстание машин

Блог разработчика
Чем больше становится телеграмм каналов, тем больше там спамеров.

Для борьбы с этим пагубным явлением, предлагаю вашему вниманию простейшего телеграмм бота.

Код написан на NodeJS с использованием библиотеки telegraf
var Telegraf = require('telegraf');
var BOT_TOKEN = 'тут всавьте токен бота';
var bot = new Telegraf(BOT_TOKEN);
var chats = {};
var nmid;
uname="Аноним "
var telegram = bot.telegram;
// Добавляем в кандидаты по приходу 
bot.on('new_chat_member', (ctx) => console.log(ctx.message.new_chat_members))
bot.on('new_chat_members', function (ctx) {
    for (var _i = 0, _a = ctx.message.new_chat_members; _i < _a.length; _i++) {
        var member = _a[_i];
		uname=member.first_name
		var chid=ctx.chat.id;
		//console.log(chid)
		Promise.all([
		bot.telegram.sendMessage(ctx.chat.id, `🤖 Присылай любое сообщение в этот чат в течение 60 секунд чтобы доказать, что ты не робот, а человек! 
`,{parse_mode: 'HTML'})
        ]).then((results) => {
	var mid = results[0].message_id;
	addCandidate(ctx.chat.id, member.id);
	setTimeout(function() { telegram.deleteMessage(chid,mid) }, 60 * 1000)
});	 
}
});
// Удаляем из кандидатов по активности
bot.on('message', function (ctx) {
    removeCandidate(ctx.chat.id, ctx.from.id);
});
// Добавляем кандидата
function addCandidate(chatId, candidateId) {
	//console.log("add")
    var candidate = {
        id: candidateId,
        time: new Date().getTime(),
    };
    var candidates = chats[chatId];
    if (candidates) {
        candidates.push(candidate);
    }
    else {
        candidates = [candidate];
    }
    chats[chatId] = candidates;
}
// Убираем кандидата
function removeCandidate(chatId, candidateId) {
    var candidates = chats[chatId];
    if (!candidates)
        return;
    chats[chatId] = candidates.filter(function (candidate) { return candidate.id !== candidateId; });
}
// Проверяем, нужно ли банить
setInterval(function () {
    for (var chatId in chats) {
        var candidates = chats[chatId];
        if (!candidates.length)
            continue;
        var now = new Date().getTime();
        for (var _i = 0, candidates_1 = candidates; _i < candidates_1.length; _i++) {
            var candidate = candidates_1[_i];
// Считаем 1 минуту
            if (candidate.time < now - 60 * 1000) {      
				Promise.all([bot.telegram.sendMessage(chatId, uname + ` не доказал, что он человек! 🤖 А всего то нужно было написать что-то в чат... Вся власть роботам!`)	
				     ]).then((results) => {
				var nmid = results[0].message_id;
				setTimeout(function() {
					telegram.deleteMessage(chatId,nmid) 
					}, 60 * 1000)
				});
                telegram.kickChatMember(chatId, candidate.id);
                removeCandidate(chatId, candidate.id);
            }
        }
    }
}, 1000);
// Включаем бота
bot.launch()