@dedxded

Как пересылать сообщения в Discord по выборке из списка слов?

Задался идеей пересылки сообщений из канала в канал по выборке слов, как это делается для фильтрации на мат.
Создал базу определенных слов, по которым необходим отбор.

Например, мне нужны все предложения со словом "пятница", "пятницей", "пятницу" что бы не пропустить их. Человек в любом из каналов написал предложение:
"В пятницу будет отличная погода".
Бот берет это сообщение и пересылает в отдельный канал, не ЛС, с упоминанием автора.

Все вроде бы получилось, НО, бот начал циклить свое же сообщение. Так как он пересылал его, то в нем снова было слово "пятницу" и он начал пересылать сам себя.

Можно ли как то ограничить бота, из какого КОНКРЕТНОГО канала брать на анализ сообщения и в какой Конкретный канал пересылать?

Или проще оставить анализ из любого канала, но пересылка в ЛС? (Если да, то как)

Заранее спасибо!

Вот код события:

@bot.event
async def on_message(message):
  if {i.lower().translate(str.maketrans('','', string.punctuation)) for i in message.content.split(' ')}\
  .intersection(set(json.load(open('slyhi.json')))) != set():
        channel = bot.get_channel(894897187593551892)
        await channel.send(f'[Выхваченное Сообщение]:~/// {message.author.mention}: {message.content}') 
        
        await bot.process_commands( message )
  • Вопрос задан
  • 2047 просмотров
Решения вопроса 1
retUrn3d
@retUrn3d
Пользователь, просто пользователь...
Для решения проблемы с постоянной пересылкой одного и того же сообщения - запретите боту слушать самого себя.
@bot.event
async def on_message(message):
    if message.author != bot.user:  # Если автор сообщения НЕ бот.
        if {i.lower().translate(str.maketrans('', '', string.punctuation)) for i in message.content.split(' ')} \
                .intersection(set(json.load(open('slyhi.json')))) != set():
            channel = bot.get_channel(894897187593551892)
            await channel.send(f'[Выхваченное Сообщение]:~/// {message.author.mention}: {message.content}')

    await bot.process_commands(message)


Если имеется желание слушать какие-то конкретные канал, просто проверяйте совпадает ли канал в который было отправлено сообщение, с каналоми из списка.
channels = [1231234234, 1231231234]
if message.channel.id in channels:
    do_something()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы