使用discord.py PermissionOverwrite触发ValueError错误求助
Discord票务机器人PermissionOverwrite异常问题解决
问题详情
我正在开发一个Discord票务机器人,使用discord.py的PermissionOverwrite功能时触发了异常,无法自行解决。
报错栈信息
Traceback (most recent call last): File "C:\Users\tserp\AppData\Roaming\Python\Python311\site-packages\discord\ui\view.py", line 427, in _scheduled_task await item.callback(interaction) File "d:\ticket bot DOK\main.py", line 48, in Dep_Button interaction.user: discord.PermissionOverwrite(view_channel=True, send_massages=True, attach_files=True, embed_links=True), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\tserp\AppData\Roaming\Python\Python311\site-packages\discord\permissions.py", line 828, in __init__ raise ValueError(f'no permission called {key}.')
涉及代码片段
47 interaction.guild.default_role: discord.PermissionOverwrite(view_channel=False), 48 interaction.user: discord.PermissionOverwrite(view_channel=True, send_massages=True, attach_files=True, embed_links=True), 49 interaction.guild.me: discord.PermissionOverwrite(view_channel=True, send_massages=True, read_massage_history=True)
参考相关教程后,预期机器人能修改频道权限,但触发了异常,请问忽略了什么问题?
问题原因与解决
核心问题:权限参数拼写错误
discord.py对权限参数的名称有严格要求,你代码里存在两处拼写错误:
send_massages→ 正确写法是send_messages(单词末尾少了一个s)read_massage_history→ 正确写法是read_message_history(单词massage应为message)
这些错误导致PermissionOverwrite无法识别对应的权限键,直接抛出ValueError异常。
修正后的代码
47 interaction.guild.default_role: discord.PermissionOverwrite(view_channel=False), 48 interaction.user: discord.PermissionOverwrite(view_channel=True, send_messages=True, attach_files=True, embed_links=True), 49 interaction.guild.me: discord.PermissionOverwrite(view_channel=True, send_messages=True, read_message_history=True)
额外提醒
使用discord.py的权限相关功能时,建议对照官方文档的权限列表确认参数名称,避免因拼写失误导致异常。
内容的提问来源于stack exchange,提问作者shom
相关产品推荐
相关产品推荐

