gpt4 book ai didi

python discord.py 在加入公会时将 DM 发送给邀请者

转载 作者:行者123 更新时间:2023-12-04 15:26:11 24 4
gpt4 key购买 nike

我目前有以下 on_guild_join代码:

@client.event
async def on_guild_join(guild):
embed = discord.Embed(title='Eric Bot', color=0xaa0000)
embed.add_field(name="What's up everyone? I am **Eric Bot**.", value='\nTry typing `/help` to get started.', inline=False)
embed.set_footer(text='Thanks for adding Eric Bot to your server!')
await guild.system_channel.send(embed=embed)
print(f'{c.bgreen}>>> {c.bdarkred}[GUILD JOINED] {c.black}ID: {guild.id} Name: {guild.name}{c.bgreen} <<<\n{c.darkwhite}Total Guilds: {len(client.guilds)}{c.end}')

(忽略 c.color 的东西,这是我在控制台上的格式)

每当有人将机器人添加到公会时,它就会向系统 channel 发送一个嵌入的信息。
我希望它向邀请机器人的人(使用 oauth 授权链接的帐户)发送 DM 相同的消息。问题在于 on_guild_join事件只接受 1 个参数, guild ,它不会向您提供有关使用授权链接将机器人添加到公会的人的任何信息。

有没有办法做到这一点?我是否必须使用“作弊”方法,例如拥有一个记录使用邀请的帐户的自定义网站?

最佳答案

由于机器人不是“受邀”的,因此添加机器人时会有一个审核日志事件。这使您可以遍历匹配特定条件的日志。

如果您的机器人可以访问审核日志,您可以搜索 bot_add事件:

@client.event
async def on_guild_join(guild):
bot_entry = await guild.audit_logs(action=discord.AuditLogAction.bot_add).flatten()
await bot_entry[0].user.send("Hello! Thanks for inviting me!")

如果您想根据自己的 ID 仔细检查机器人的 ID:

@client.event
async def on_guild_join(guild):
def check(event):
return event.target.id == client.user.id
bot_entry = await guild.audit_logs(action=discord.AuditLogAction.bot_add).find(check)
await bot_entry.user.send("Hello! Thanks for inviting me!")

引用文献:
  • Guild.audit_logs()
  • AuditLogAction.bot_add
  • AsyncIterator.find()
  • 关于python discord.py 在加入公会时将 DM 发送给邀请者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62203806/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com