能否将Discord聊天输入作为变量并执行逻辑判断?
解决Discord机器人
wait_for_message无响应及用户输入作为变量的问题 首先,你的机器人无响应的核心原因是第14行的wait_for_message用法错误:你把content参数设为(int),这个参数需要的是具体字符串内容或者匹配函数,而不是类型对象int。机器人一直在等待内容等于int这个对象的消息,这显然永远不会发生,所以它会一直卡住,没有后续响应。
接下来,我们可以调整代码,正确捕获用户输入并将其转为整数用于逻辑判断,同时处理用户输入非数字的异常情况:
修正后的完整代码
import random import discord from discord.ext import commands from discord.ext.commands import Bot import asyncio drone = commands.Bot(command_prefix="!") @drone.event async def on_message(message): # 跳过机器人自身发送的消息,避免循环触发 if message.author == drone.user: return if message.content.startswith("g"): await drone.send_message(message.channel, "text1") # 仅等待当前发起命令的用户发送消息 msg = await drone.wait_for_message(author=message.author) try: # 将用户输入的内容转换为整数,作为猜测值 user_guess = int(msg.content) except ValueError: # 处理用户输入非数字的情况,给出提示后结束流程 await drone.send_message(message.channel, "请输入有效的数字哦!") return # 生成1-10范围内的随机数 random_num = random.randint(1, 10) # 执行猜测判断逻辑 if user_guess == random_num: await drone.send_message(message.channel, "text2") else: # 可选:添加猜错后的提示,告知用户正确数字 await drone.send_message(message.channel, f"猜错啦!正确数字是{random_num}") # 保留这一行,确保后续添加的命令能被bot正常处理 await drone.process_commands(message)
关键修正点说明
- 正确捕获用户消息:去掉
wait_for_message里错误的content=(int)限制,先获取用户的消息对象,再提取内容转换为整数,这样就能把用户输入作为变量使用。 - 异常处理:用
try-except捕获用户输入非数字的情况,避免程序崩溃,同时给用户友好的提示。 - 避免循环触发:添加
if message.author == drone.user: return,防止机器人响应自己发送的消息导致无限循环。 - 兼容命令功能:最后加上
await drone.process_commands(message),确保如果后续添加@drone.command()装饰的命令,bot能正常识别处理。
另外,你使用的drone.send_message是discord.py旧版本的写法,新版本已经改为message.channel.send(),如果后续升级库的话需要对应调整。
内容的提问来源于stack exchange,提问作者PsychoRhano
相关产品推荐
相关产品推荐

