Discord.py运行时无法在用户指定分类下创建频道问题求助
Discord机器人频道分类匹配错误排查
以下是代码中存在的问题点:
- 获取到的
y是完整的discord.Message对象,而非用户输入的文本内容,直接将y作为分类名称参数传入discord.utils.get会永远匹配不到对应分类,需要取y.content获取用户输入的文本。 - 没有做空值校验:如果用户输入的分类名不存在、拼写错误,
z会返回None,此时create_text_channel方法会忽略category参数,直接将频道创建在服务器根目录。 - 未做权限校验:机器人需要同时拥有服务器的管理频道权限,以及对应分类的「查看频道」「管理频道」权限,否则也会出现分类赋值失败的情况。
- 匹配规则过于严格:Discord分类名称对大小写、前后空格敏感,用户输入时多打空格、大小写不一致都会导致匹配失败,建议添加字符串清洗逻辑。
wait_for未添加过滤条件:如果有其他用户在超时时间内发送消息,会拿到错误的输入内容,导致分类匹配失败。
修正后的参考代码
if sly.content.startswith("sly ctchan"): x = sly.content.split("sly ctchan ",1)[1].strip() await sly.channel.send("请输入要归属的分类名称:") # 定义过滤规则:只接收发命令的用户的消息 def check(msg): return msg.author == sly.author and msg.channel == sly.channel try: y = await client.wait_for('message', timeout=15.0, check=check) category_name = y.content.strip() # 可以改为大小写不敏感匹配,按需开启 # z = discord.utils.get(sly.guild.categories, name=lambda n: n.lower() == category_name.lower()) z = discord.utils.get(sly.guild.categories, name=category_name) if not z: await sly.channel.send("未找到对应分类,请检查名称是否正确") return # 验证机器人权限 if not sly.guild.me.guild_permissions.manage_channels: await sly.channel.send("机器人没有管理频道的权限,无法创建频道") return await sly.guild.create_text_channel(x, overwrites=None, category=z) await sly.channel.send(f"已成功在分类 {category_name} 下创建频道 {x}") except TimeoutError: await sly.channel.send("等待输入超时,操作已取消")
内容的提问来源于stack exchange,提问作者DrGuileDish1
相关产品推荐
相关产品推荐

