@nikoiman

Discord BOT на Python неправильно различает сообщения, как исправить?

Всем доброго времени суток. Сделал бота для дискорда.

Но вот косяк вышел, бот реагирует на букву "и", если в сообщении букв 2 и более он просит не следить за базаром, и не важно какие слова там)

даже если слов нет в словаре, например "любовь и голуби и куры" ни одного из слов нет в словарях бота, но он реагирует на буквы "и" и выдает "следи за базаром"

Словари не выкладываю сюда, там неприличных слов много ;)

client = discord.Client()

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))


@client.event
async def on_message(message):
    if message.author == client.user:
        return

    msg = message.content.lower()
    msg_list = msg.split()

    if (msg in ne_rugaemsa) or len(list(set(msg_list+ne_rugaemsa)))<len(msg_list) + len(ne_rugaemsa):
        await message.channel.send(f' { message.author.mention }  За базаром следи ;)')
        return

    if message.content.startswith('help'):
        await message.channel.send(f' { message.author.mention } Я бот, со мной можно поболтать. Не судите строго, если я чего-то не знаю, меня скоро обязательно научат  :)')
        return
    
    if (msg in hello_words1) or len(list(set(msg_list+hello_words1)))<len(msg_list) + len(hello_words1):
        await message.channel.send(f' { message.author.mention } Здарова')
        return
    
    if (msg in goodbuy_words1) or len(list(set(msg_list+goodbuy_words1)))<len(msg_list) + len(goodbuy_words1):
        await message.channel.send(f' { message.author.mention } Досвидание милое создание')
        return
 
    if (msg in loh) or len(list(set(msg_list+loh)))<len(msg_list) + len(loh):
        await message.channel.send(f' { message.author.mention } само ты лох, ясна?!')
        return








client.run
  • Вопрос задан
  • 53 просмотра
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Я бы предложил убрать эти странные проверки с len liset set и заменить на нормальные.

Вместо
if (msg in ne_rugaemsa) or len(list(set(msg_list+ne_rugaemsa)))<len(msg_list) + len(ne_rugaemsa):


можно просто написать
if any(word for word in msg.split() if word in ne_rugaemsa)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы