discord.py: аргумент проверки методов wait_for (), препятствующий выполнению - PullRequest
0 голосов
/ 20 сентября 2019

Context

Я делаю бот discord.py (rewrite-v1.0 +), я только что создал Cog с некоторыми базовыми SQL и Python для создания чат-бота, но когда событие 'message'происходит бот полностью игнорирует его.Я провел некоторое исследование, и больше всего я смог узнать user = discord.Client изменения user = discord.Client()
Я новичок в Discord.py, поэтому любая помощь будет принята с благодарностью!



мини-код:

#ai cog
import discord
from discord.ext import commands
import asyncio

client = commands.Bot(command_prefix="$")
user = discord.Client()

class ai(commands.Cog):
    def __init__(self, client):
        self.client = client

    @commands.command(aliases=['c','ch','cha','4'])
    async def chat(self, ctx, *, message:str):
        Bot = 'Hello!'
        #I am guessing problem is here
        def nobotspeakshere(message):
                if message.author.bot == True:
                    return False
        while True:

            #try:
            msg = await user.wait_for('message', check=nobotspeakshere)             
            #except asyncio.TimeoutError:
                #await ctx.send('Bot: bye')
                #break

            you = msg.content
            print(you)
            await ctx.send('Bot: ' + Bot)
            if you == '':
                break
            elif you == 'bye':
                await ctx.send("Bot: bye")
                break
            else:
                pass
            #some working sql
            #sql gives bot = "something else"

def setup(client):
    client.add_cog(ai(client))


ожидается: печатает переменную 'you' и продолжает выполнение

output: игнорирует сообщение, введенное в канал

ожидаемая проблема: метод nobotspeakshere не работает должным образом.

reserch done: https://github.com/Rapptz/discord.py/issues/1371

также, когда команда используется без аргумента 'message', бот выдает ошибку, поэтому бот отвечаеткомандовать использованием

1 Ответ

0 голосов
/ 20 сентября 2019

Ваша функция никогда не возвращает True, только False (если автор бот) или None (возвращаемое значение по умолчанию).Поскольку None является ложным значением, рассматривает его как ложное.

Лучшим изменением будет всегда возвращать значение, противоположное message.author.bot

msg = await user.wait_for('message', check=lambda message: not message.author.bot)  
...