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

时间:2020-06-04 20:46:04

标签: python python-3.x oauth-2.0 discord discord.py

我目前有以下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的东西,这是我在控制台上的格式)

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

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

1 个答案:

答案 0 :(得分:2)

由于未“邀请”漫游器,因此添加了漫游器时会出现审核日志事件。这样,您便可以遍历符合特定条件的日志。

如果您的漫游器有权访问审核日志,则可以搜索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:

@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!")

参考: