名称“公会”未定义

Posted

技术标签:

【中文标题】名称“公会”未定义【英文标题】:name 'guild' is not defined 【发布时间】:2020-11-28 01:27:44 【问题描述】:

我正在编写一个机器人来在我的不和谐服务器上查找具有“管理员”角色的用户并打印信息admin用户名)并将所有角色存储在一个列表中peopleWithRole:

import discord
from discord.ext import commands

bot = commands.Bot(command_prefix="$")
role_name = "Admin"
peopleWithRole = []

@bot.event
async def on_ready():
    print("Logged in as")
    print(bot.user.name)
    print("------")
    role = discord.utils.find(
        lambda r: r.name == role_name, guild.roles)
        
    for user in guild.members:
        if role in user.roles:
            peopleWithRole.append(user)

bot.run("My token")

但是,当我运行它时,返回 error 'guild' 未定义。我刚开始使用 discord python 模块。在这种情况下我应该如何使用客户端或bot?。

【问题讨论】:

【参考方案1】:
import discord
from discord.ext import commands

bot = commands.Bot(command_prefix="$")
role_name = "Admin"
peopleWithRole = []

@bot.event
async def on_ready():
    print("Logged in as")
    print(bot.user.name)
    print("------")
    guild = bot.guilds[0]

    role = discord.utils.find(
        lambda r: r.name == role_name, guild.roles)
        
    for user in guild.members:
        if role in user.roles:
            peopleWithRole.append(user)

bot.run("My token")

在您的 find 调用中,您引用了 guild.roles 但从未定义公会。你需要选择公会(我相信公会是bot的成员)

这是一个相当基本的 Python 调试错误,任何 IDE 都会识别出什么是错误的。我建议您查看一些有关如何调试的教程。

【讨论】:

有什么可以代替公会的吗?我只是看到其他人在使用它,我只是认为公会只是说服务器的方式。我以为 guild.members 是在谈论服务器的所有成员 它是...如果 guild = discord.Guild 对象实例。现在它是一个未定义的变量。 我正在建立一个测试实例来修复你的代码......但同样,你只需要从你的机器人对象中选择合适的公会。 您能进一步解释一下吗?我创建了一个变量 guild = discord.Guild,但这给了我另一个错误 'property' object is not iterable 是的,只是和一群朋友为我的服务器编写一个机器人。

以上是关于名称“公会”未定义的主要内容,如果未能解决你的问题,请参考以下文章

ReferenceError:尝试放置让公会时未定义消息

Discord.js - 公会 ID 未定义,即使有定义

无法读取未定义 discord.js 的属性“公会”

TypeError:无法读取未定义的属性(读取“公会”)

Server Stats 代码将通道更新为未定义而不是成员总数

在 guild.roles 中获取未定义