【问题标题】:Discord Bot Python 3.6 Error importing commandsDiscord Bot Python 3.6 导入命令时出错
【发布时间】:2020-07-10 17:24:33
【问题描述】:
import discord
from discord.ext.commands import commands,has_permissions, MissingPermissions
import json

with open('reports.json', encoding='utf-8') as f:
  try:
    report = json.load(f)
  except ValueError:
    report = {}
    report['users'] = []

client = discord.ext.commands.Bot(command_prefix = '?')

当我运行它时,它来了。如果我从discord.ext import commands,has_permissions, MissingPermissions 给,那么这个来ImportError: cannot import name 'has_permissions'

Traceback (most recent call last):
  File "F:\Rubayet\Discord Bots\Discord.py\Test.Bot\Test.Bot.py", line 2, in <module>
    from discord.ext.commands import commands,has_permissions, MissingPermissions
ImportError: cannot import name 'commands'

我不知道为什么。请帮我解决这个问题。

【问题讨论】:

  • 您必须中断导入语句才能正确导入模块。您不能从命令导入命令。试试from discord.ext import commands 然后from discord.ext.commands import has_permissions
  • 我做到了,它工作了,但 MissingPermissions 不见了,所以我从 discord.ext.commands import MissingPermissions 做了,但它引发了异常 ImportError: cannot import name 'Missing_Permissions'
  • 您能否更新您正在使用的不和谐包,因为我在不和谐中看不到任何名为 MissingPermissions 的模块。
  • 我真的很抱歉.....忘记那些东西了。问题解决了。

标签: python python-3.x discord discord.py


【解决方案1】:

MissingPermissions 仅在重写分支中可用。如果没有,需要卸载discord.py然后运行

pip install -U git+https://github.com/Rapptz/discord.py@rewrite#egg=discord.py[voice]

然后您可以重新组织您的导入。导入commands 并通过该导入引用所有内容,或者导入您单独使用的所有内容。不要两者都做。

from discord.ext import commands

bot = commands.Bot(command_prefix='!')

@bot.command()
@commands.has_permissions(...)
...

from discord.ext.commands import Bot, has_permissions

bot = Bot(command_prefix='!')

@bot.command()
@has_permissions()
...

【讨论】:

    【解决方案2】:

    我假设您正在使用Rapptz/Discord.py 您无法从命令文件夹中导入命令。没有这种事。

    我相信您正在寻找core 类的has_permissions 方法:

    from discord.ext import commands
    from discord.ext.commands import has_permissions
    

    你需要为MissingPermissions定义你自己的错误

    class MissingPermissions(Exception):
    
    #and here's a "custom" check example
    def has_perms(**perms):
        if has_permissions(perms):
            return True
        else:
            raise MissingPermissions
    

    【讨论】:

    • 命令模块导入仍然会失败。你没有在你的答案中管理它。检查我的评论。
    • 糟糕,很抱歉,我离开电脑检查我的代码。并没有看到你的评论。哈哈谢谢! 已编辑
    • 定义你自己的方法并检查他们是否有这个权限
    猜你喜欢
    • 2020-08-11
    • 2019-03-07
    • 2018-10-21
    • 2021-03-01
    • 2018-07-08
    • 2021-04-11
    • 1970-01-01
    • 2018-07-07
    • 2021-04-30
    相关资源
    最近更新 更多