每当机器人加入新服务器时,如何使机器人通过公会的邀请链接发送消息到公会中的特定频道?

时间:2020-08-20 14:33:55

标签: python discord.py

所以基本上我想要的是,无论何时我的机器人加入任何行会,它都应该向服务器中的特定频道发送一条消息,表明它已被邀请使用其名称以及可能的服务器邀请链接到服务器。我尝试了一些方法,但它们从未真正起作用。

@client.event
async def on_guild_join(guild):
    channel = client.get_channel('736984092368830468')
    await channel.send(f"Bot was added to {guild.name}")

它不起作用,并引发以下错误:

Ignoring exception in on_guild_join
Traceback (most recent call last):
  File "C:\Users\Rohit\AppData\Roaming\Python\Python37\site-packages\discord\client.py", line 312, in _run_event
    await coro(*args, **kwargs)
  File "c:\Users\Rohit\Desktop\discord bots\test bot\main.py", line 70, in on_guild_join
    await channel.send(f"Bot was added to {guild.name}")
AttributeError: 'NoneType' object has no attribute 'send'

我真的不知道如何使机器人通过行会名称发送行会的邀请链接。

2 个答案:

答案 0 :(得分:2)

出现'NoneType' object has no attribute 'send'异常的原因是因为您的漫游器无法找到提供的频道。

此行:

channel = client.get_channel('736984092368830468')

将不起作用,这是因为通道ID必须为整数,您可以尝试以下操作:

channel = client.get_channel(int(736984092368830468))

如果仍然无法执行此操作,请确保漫游器可以访问该通道,该通道存在并且提供的ID正确。

答案 1 :(得分:0)

在这里,假设您的机器人具有所需的权限,您将如何获得邀请,姓名和行会图标。

@client.event
async def on_guild_join(guild):
    channel = client.get_channel(745056821777006762)
    invite = await guild.system_channel.create_invite()

    e = discord.Embed(title="I've joined a server.")
    e.add_field(name="Server Name", value=guild.name, inline=False)
    e.add_field(name="Invite Link", value=invite, inline=False)
    e.set_thumbnail(url=guild.icon_url)
    await channel.send(embed=e)

enter image description here