即使在使用 global 使其成为全局范围后,变量仍为空

variable is empty even after using global to make it global scoped

我希望我的程序在有人加入 discord 服务器 (discord.py) 时立即欢迎他们,这部分工作正常。然而,为了获得公会名称,我的程序在一个频道中发送了一条消息,然后它检查它是否在所需的频道中发送了消息并使用 message.guild.name 从那里获取公会名称。现在要让它工作,它需要是全局范围的,因为我的代码中有两个函数,一个是 on_message,另一个是 on_member_join。不知何故,它可以正常工作,但是当它发送欢迎消息时,它只是将公会名称注册为空字符串。为什么?

为了更清楚起见,这是我的代码:

client = discord.Client()
serverName = ""

@client.event
async def on_message(message):
    if message.content.lower() == "a new member has arrived" and message.author == client.user:
        global serverName
        serverName = message.guild.name

@client.event
async def on_member_join(member):
    embed = discord.Embed(title="Welcome to " + serverName) #here it shows the initially declared empty string.
    await member.send(embed=embed)
    await client.get_channel(channelId).send("A new member has arrived")

您无需发送消息即可获取公会名称。 在 member join 上有一个 discord.Member 参数,它是公会的成员。你可以通过 member.guild.name

获得公会名称