Бот Discord отправляет несколько сообщений

#python #youtube-api #youtube-data-api #discord.py #discord.py-rewrite

#python #youtube-api #youtube-data-api #discord.py

Вопрос:

Когда я запускаю код и происходит какое-то событие, бот постоянно отправляет сообщение из третьего оператора elif. Это сообщение должно быть ссылкой на видео YouTube, потому что я создал функцию, которая считывает сообщение, отправленное кем-либо, выполняет поиск видео и возвращает ссылку на видео

Я переместил код, который выполняет поиск видео, в функцию getVid(), я переместил его в другой файл с именем search.py Я пытался получить ссылку на видео многими другими способами, но ничего не помогло

Это main.py фрагмент, вызывающий проблему (содержащий discord bot):

 @client.event
async def on_message(message):
    id = client.get_guild(###)

    if message.content == "!hello":
        await message.channel.send("hi")
    elif message.content == "!members":
        await message.channel.send(f"""All members: {id.member_count}""")
    elif message.content != "!hello" or "!members":
        res = search.getVid(message.content)
        await message.channel.send(res)
  

И вот подключение к API YouTube search.py:

 def getVid(txt):
    req = youtube.search().list(q=txt, part="snippet", type="video", maxResults=3)
    res = req.execute()
    count = 0
    links = []
    for item in res['items']:
        links.append(item['id']['videoId'])
        count = count 1
        if count==3:
            break
    print(links)
    vid = links[0]
    print(links[0])
    link = f"http://youtube.com/watch?v={vid}"
    return link
  

Я знаю, что это выглядит замаскированным, но я действительно перепробовал все, чтобы заставить это работать.

Третий оператор elif выполняется каждый раз, даже когда должен выполняться только один оператор, но когда я удаляю эту функцию, все работает правильно. Надеюсь, я написал это достаточно ясно, спасибо за любую помощь

Комментарии:

1. Вы должны включить if message.author == bot.user: return в начало on_message , чтобы ваш бот не отвечал на свои собственные сообщения.

Ответ №1:

Строка

elif message.content != "!hello" or "!members":

проверяет, что либо message.content != "!hello" , либо значение "!members" соответствует действительности. Поэтому он всегда будет возвращаться true . Вы захотите сделать это вместо:

elif message.content != "!hello" or message.content != "!members":

или даже:

message.content not in ["!hello", "!members"]