即使在使用 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
获得公会名称
我希望我的程序在有人加入 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