You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord机器人?roast命令无法同时兼容带与不带@用户调用,是否有其他实现方案?

问题根源

你当前的代码强制要求roast命令必须传入一个discord.Member类型的用户参数,所以不带@用户调用?roast时,会因为参数校验不通过无法触发命令逻辑。

修复方案

将member参数改为可选参数,设置默认值为None,再根据参数是否存在走不同的逻辑分支即可同时支持两种调用格式,完整实现代码如下:

# 顶部先导入类型标注依赖,python 3.10+版本可直接用`discord.Member | None`替代Optional
from typing import Optional
import random
import discord
from discord.ext import commands

@client.event
async def on_ready():
    await client.change_presence(status=discord.Status.dnd, activity=discord.Game(' "?" Booe'))
    print('Bot is ready to play!')

@client.command()
async def roast(ctx, member: Optional[discord.Member] = None):
    # 无指定用户时默认把调用者作为调侃对象,你也可以自行修改这个分支的逻辑
    if not member:
        roast_list = [
            f"{ctx.author.mention} 你就像单词Queue里的UEUE一样,毫无存在意义",
            # 可自行添加更多无参数场景的调侃话术
        ]
    else:
        roast_list = [
            f"{ctx.author.mention} 觉得{member.mention}就像单词Queue里的UEUE一样,毫无存在意义",
            # 可自行添加更多指定用户场景的调侃话术
        ]
    await ctx.send(random.choice(roast_list))
扩展说明

如果需要支持用户输入无效用户(比如输了不存在的用户名)不报错,可以额外添加commands.MemberNotFound异常捕获,或者给参数加default=None的同时关闭类型转换校验,可根据自己的使用场景调整。

内容的提问来源于stack exchange,提问作者AndreiWJL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:06:04