Python Discord' Context'对象没有属性'公会'

时间:2018-04-10 18:53:35

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

我试图编写一个机器人,为用户提供一个" Admin"他键入" b.assemble"时的角色,但我不断收到此错误:

discord.ext.commands.errors.CommandInvokeError: 
AttributeError: 'Context' object has no attribute 'guild'

调用错误的部分如下所示:

guild = ctx.guild
await guild.create_role(name="Admin")
role = discord.utils.get(ctx.guild.roles, name="Admin")
user = ctx.message.author
await user.add_roles(role)

3 个答案:

答案 0 :(得分:3)

正如M. I. Wright在他们的回答中所写,你正在使用discord.py的异步分支。

在异步分支中,ctx.guild不存在,您可以重新安装到重写分支(如其他应答者的建议),也可以使用ctx.guild的异步分支替代方法:

server = ctx.message.server
role = await client.create_role(server, name="Admin")

member = ctx.message.author
await client.add_roles(member, role)

client是机器人。

discord.py稳定版的文档在这里:http://discordpy.readthedocs.io/en/async/api.html

答案 1 :(得分:1)

您正在使用rewrite的文档,但目前还没有在PyPI上发布重写,因此执行pip install discord.py会获得discord.py的旧版(当前公开版),被称为“异步”*。

如果你想使用重写,你必须暂时使用pip install -U git+https://github.com/Rapptz/discord.py@rewrite从GitHub安装它。否则,您可以坚持pip install discord.py并参考docs for async

但是,请注意,重写现在完全可用,并没有等待正式发布,而异步是在仅错误修复模式下,并且缺乏对像Discord API这样的一些新增功能的支持。 Async的对象模型也有些令人失望,因为所有都绑定到了bot / client实例;这在重写中得到了缓解,例如你可以写await channel.send(message)而不是await client.send(channel, message) 因此,如果你能够坚持使用重写,并且你可以尝试使用ctx.guild - 但请注意,你需要定期重新执行上述pip install -U git+...命令作为更新滚动。(还考虑加入Discord上的库支持服务器,链接到其GitHub仓库,在那里你会得到这些更新的消息。)

*“async”有点用词不当或至少是一个奇怪的名字,因为“rewrite”也使用了Python asyncio。他们只是方便的版本标记。

答案 2 :(得分:0)

我不是专家,但我有很多经验。我相信我看到了你的问题。

server = ctx.message.server
role = await client.create_role(server, name="Admin")

member = ctx.message.author
await client.add_roles(member, role)

尝试此操作。...

roles=["Admin","Moderator","Member"]
server = ctx.message.guild
for role in roles:
    await client.create_role(server, role)