首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Discord.py discord.NotFound异常

Discord.py discord.NotFound异常
EN

Stack Overflow用户
提问于 2018-03-25 16:35:37
回答 1查看 5.3K关注 0票数 2

所有人。我一直在为我的不和谐服务器开发一些机器人,在其中一个问题上我遇到了一个我似乎无法解决的问题。我有一个名为'info‘的命令,本质上,这个命令显示一些关于所需用户的信息。当我调用命令?info [user]时,它工作得很好,直到我故意请求一个不存在的用户的信息来测试我已经存在的异常。在这里‘

代码语言:javascript
复制
@laugh.command(pass_context=True)
async def info(ctx, user: discord.Member = None):
    if ctx.message.channel.name != "admin":
        await laugh.send_message(ctx.message.author, "Sorry, you need to be in a text channel called 'admin' for that.")
        return
    if not ctx.message.author.server_permissions.administrator:
        return
    if not user:
        user = ctx.message.author
    try:
        minfo = ("""
{0}'s ID is: {1}
{0}'s status is: {2}
{0}'s highest role is: {3}
{0} joined at: {4}""".format(user.name, user.id, user.status, user.top_role, user.joined_at))
        embed = discord.Embed(title = user.name, description = minfo, color = 0x00D2FF)
        await laugh.say(embed = embed)
    except discord.NotFound:
        await laugh.say("User not found.")

当我运行这段代码并将一个不存在的用户作为参数时,我的异常不起作用,相反,我将这个输出发送到我的控制台:

代码语言:javascript
复制
Ignoring exception in command info
Traceback (most recent call last):
  File "C:\Users\Matthew\AppData\Local\Programs\Python\Python36-32\lib\site-packages\discord\ext\commands\bot.py", line 846, in process_commands
    yield from command.invoke(ctx)
  File "C:\Users\Matthew\AppData\Local\Programs\Python\Python36-32\lib\site-packages\discord\ext\commands\core.py", line 367, in invoke
    yield from self.prepare(ctx)
  File "C:\Users\Matthew\AppData\Local\Programs\Python\Python36-32\lib\site-packages\discord\ext\commands\core.py", line 345, in prepare
    yield from self._parse_arguments(ctx)
  File "C:\Users\Matthew\AppData\Local\Programs\Python\Python36-32\lib\site-packages\discord\ext\commands\core.py", line 304, in _parse_arguments
    transformed = yield from self.transform(ctx, param)
  File "C:\Users\Matthew\AppData\Local\Programs\Python\Python36-32\lib\site-packages\discord\ext\commands\core.py", line 223, in transform
    raise e
  File "C:\Users\Matthew\AppData\Local\Programs\Python\Python36-32\lib\site-packages\discord\ext\commands\core.py", line 221, in transform
    return (yield from self.do_conversion(ctx, converter, argument))
  File "C:\Users\Matthew\AppData\Local\Programs\Python\Python36-32\lib\site-packages\discord\ext\commands\core.py", line 184, in do_conversion
    return instance.convert()
  File "C:\Users\Matthew\AppData\Local\Programs\Python\Python36-32\lib\site-packages\discord\ext\commands\converter.py", line 100, in convert
    raise BadArgument('Member "{}" not found'.format(self.argument))
discord.ext.commands.errors.BadArgument: Member "test" not found

我看过无数的例子和论坛帖子,我所获得的唯一的知识就是错误的来源是在async def info(ctx, user: discord.Member = None):中,对于我能做什么有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-25 16:44:54

命令的错误处理有点奇怪。当为参数user指定转换器时,该转换将在命令coroutine正文之外进行。要处理它,您必须编写一个错误处理程序coroutine,并将其与所述命令关联。

代码语言:javascript
复制
@laugh.command(pass_context=True)
async def info(ctx, user: discord.Member = None):
    if ctx.message.channel.name != "admin":
        await laugh.send_message(ctx.message.author, "Sorry, you need to be in a text channel called 'admin' for that.")
        return
    if not ctx.message.author.server_permissions.administrator:
        return
    if not user:
        user = ctx.message.author
    minfo = ("""
{0}'s ID is: {1}
{0}'s status is: {2}
{0}'s highest role is: {3}
{0} joined at: {4}""".format(user.name, user.id, user.status, user.top_role, user.joined_at))
    embed = discord.Embed(title = user.name, description = minfo, color = 0x00D2FF)
    await laugh.say(embed = embed)

@info.error
async def info_error(ctx, error): # This might need to be (error, ctx), I'm not sure
    if isinstance(error, commands.BadArgument):
        await laugh.say('I could not find that user')

您可以在discord.ext.commands中阅读错误处理程序和其余重写分支的文档。模块的文档。

如果您要使用命令扩展做大量工作,那么现在转换您的代码以便您能够使用准确的文档可能是有意义的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49478189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档