Discord.py 如何检查小部件是否被禁用

Discord.py how to check if the widget is disabled

我正在尝试检查小部件是否已启用以避免 HTTP 错误 (404)。但我找不到办法,甚至查看 API 参考资料。你能帮我么?谢谢。

虽然我通常建议不要在没有特定错误的情况下使用 except,但它会在使用 urllibs HTTPError 时忽略异常。如果小部件被禁用,你应该得到一个 Forbidden: 403 错误,而不是 404。

由于您没有提供任何代码或示例,我只是编写了一个小命令,returns如果公会的小部件可用。

@bot.command()
async def check_widget(ctx):
    try:
        widget = await ctx.guild.widget()
        ctx.send("Widget Available!")
    except:
        await ctx.send("Widget unavailable!")

Discord 重写没有检查小部件是否在线的选项。为了检查这最终检查您是否可以获得有效响应。因此,为了仍然能够检查您需要尝试使用小部件来检查它是否在线。

每当您收到 HTTP 错误时,您就知道它处于脱机状态(或无法运行)。

我的建议是创建一个简单的函数来检查它是否在线:

# Checks if the widget is online by 
# trying to access the widget through a guild object.
async def widget_is_online(guild):
    try:
        # or a function that needs online functionality
        await guild.widget()
        return True
    except:
        return False

东西说的也是个好主意。就是在你尝试使用widget的地方使用一个try-except。 except 捕获 http 错误异常的地方。这可能比使用前面描述的函数更好更快,以防止 http 错误。