Discord.py get_member 和 on_ready
Discord.py get_member with on_ready
我们在服务器上有一个 bot 命令 !verifyme1
将成员添加到角色。
async def verfiyme1(ctx):
user=ctx.message.author
#user=ctx.guild.get_member(536147700115308545)
print(user)
channel = bot.get_channel(858993936932274196)
print(client)
await user.send('Welcome to the Member Club!')
role= discord.utils.get(user.guild.roles, name="Holder Club")
if role in user.roles:
await channel.send(f"You are already a member of the holder club!")
#exit()
else:
await user.add_roles(role)
await channel.send(f"Congrats {user.mention} You are now a member of the Holder Club!")
#exit()
我们需要更改命令,使其不是由用户触发,而是由我们触发脚本(因此我们可以进行一些额外的验证检查)即加载 members.py 触发它以将角色添加到然后选择的成员退出。
查看我需要使用的文档 on_ready()
async def on_ready():
#user=ctx.message.author
print("this is a test")
channel = bot.get_channel(858993936932274196)
print(channel)
user=ctx.guild.get_member([we will pass this ID in])
print(user)
await user.send('Welcome to the Member Club!')
role= discord.utils.get(user.guild.roles, name="Holder Club")
if role in user.roles:
await channel.send(f"You are already a member of the holder club!")
#exit()
else:
await user.add_roles(role)
await channel.send(f"Congrats {user.mention} You are now a member of the Holder Club!")
#exit()
bot.run(DISCORD_TOKEN)
但问题是您不能将 ctx 与 on_ready 一起使用,因此 ctx.guild.get_member returns 会出错。除了 guild.get.member 之外,还有其他可行的方法吗?
你可以得到公会,就像你得到频道一样
guild = bot.get_guild(guild_id)
在 docs 中找到。
@bot.event
async def on_ready():
guild = bot.get_guild(guild_id)
if guild == None:
guild = await bot.fetch_guild(guild_id) # if guild not in cache
user = guild.get_member(536147700115308545)
channel = guild.get_channel(858993936932274196)
await user.send('Welcome to the Member Club!')
role = discord.utils.get(guild.roles, name="Holder Club")
if role in user.roles:
await channel.send(f"You are already a member of the holder club!")
#exit()
else:
await user.add_roles(role)
await channel.send(f"Congrats {user.mention} You are now a member of the Holder Club!")
#exit()
我们在服务器上有一个 bot 命令 !verifyme1
将成员添加到角色。
async def verfiyme1(ctx):
user=ctx.message.author
#user=ctx.guild.get_member(536147700115308545)
print(user)
channel = bot.get_channel(858993936932274196)
print(client)
await user.send('Welcome to the Member Club!')
role= discord.utils.get(user.guild.roles, name="Holder Club")
if role in user.roles:
await channel.send(f"You are already a member of the holder club!")
#exit()
else:
await user.add_roles(role)
await channel.send(f"Congrats {user.mention} You are now a member of the Holder Club!")
#exit()
我们需要更改命令,使其不是由用户触发,而是由我们触发脚本(因此我们可以进行一些额外的验证检查)即加载 members.py 触发它以将角色添加到然后选择的成员退出。
查看我需要使用的文档 on_ready()
async def on_ready():
#user=ctx.message.author
print("this is a test")
channel = bot.get_channel(858993936932274196)
print(channel)
user=ctx.guild.get_member([we will pass this ID in])
print(user)
await user.send('Welcome to the Member Club!')
role= discord.utils.get(user.guild.roles, name="Holder Club")
if role in user.roles:
await channel.send(f"You are already a member of the holder club!")
#exit()
else:
await user.add_roles(role)
await channel.send(f"Congrats {user.mention} You are now a member of the Holder Club!")
#exit()
bot.run(DISCORD_TOKEN)
但问题是您不能将 ctx 与 on_ready 一起使用,因此 ctx.guild.get_member returns 会出错。除了 guild.get.member 之外,还有其他可行的方法吗?
你可以得到公会,就像你得到频道一样
guild = bot.get_guild(guild_id)
在 docs 中找到。
@bot.event
async def on_ready():
guild = bot.get_guild(guild_id)
if guild == None:
guild = await bot.fetch_guild(guild_id) # if guild not in cache
user = guild.get_member(536147700115308545)
channel = guild.get_channel(858993936932274196)
await user.send('Welcome to the Member Club!')
role = discord.utils.get(guild.roles, name="Holder Club")
if role in user.roles:
await channel.send(f"You are already a member of the holder club!")
#exit()
else:
await user.add_roles(role)
await channel.send(f"Congrats {user.mention} You are now a member of the Holder Club!")
#exit()