我正在制作一个discord.py(rewrite-v1.0 +)机器人,我只是用一些基本的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))
如果在不带“ message”参数的情况下使用命令,则漫游器会引发错误,因此漫游器会响应命令使用情况
答案 0 :(得分:1)
您的函数从不返回True
,仅返回False
(如果作者是机器人)或None
(默认返回值)。由于None
是一个虚假值,因此discord.py会将其视为false。
最好的选择是始终返回message.author.bot
的反面
msg = await user.wait_for('message', check=lambda message: not message.author.bot)