为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

墨色风雨 2022-12-27 17:15:13
我目前有以下on_guild_join代码:@client.eventasync 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它不会为您提供有关使用授权链接将机器人添加到公会的人的任何信息。有没有办法做到这一点?我是否必须使用“作弊”方法,例如拥有一个记录使用邀请的帐户的自定义网站?
查看完整描述

2 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

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


如果您的机器人可以访问审核日志,您可以搜索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!")


查看完整回答
反对 回复 2022-12-27
?
慕村9548890

TA贡献1884条经验 获得超4个赞

这篇文章

使用discord.py 2.0,您可以获得BotIntegration服务器的信息以及邀请机器人的用户信息。

例子

from discord.ext import commands


bot = commands.Bot()


@bot.event

async def on_guild_join(guild):

    # get all server integrations

    integrations = await guild.integrations()


    for integration in integrations:

        if isinstance(integration, discord.BotIntegration):

            if integration.application.user.name == bot.user.name:

                bot_inviter = integration.user# returns a discord.User object

                

                # send message to the inviter to say thank you

                await bot_inviter.send("Thank you for inviting my bot!!")

                break

注意: guild.integrations()需要Manage Servermanage_guild) 权限。



查看完整回答
反对 回复 2022-12-27
  • 2 回答
  • 0 关注
  • 95 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信