Discord.py Welcome Bot on_member_join事件没有被调用

时间:2020-09-30 16:32:52

标签: discord discord.py discord.py-rewrite

我最近对与不和谐的bot一起工作很感兴趣,从我所看到的来看,这段代码应该可以工作,但事实并非如此。 我只是在玩弄API,因为它很有趣,所以我对此很陌生。我只希望机器人在有人加入时欢迎他们。

import discord

client = discord.Client()

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))
    channel = client.guilds[0].get_channel(CHANNEL ID)
    await channel.send("Bot online")

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith('$hello'):
        await message.channel.send('Hello!')

@client.event
async def on_member_join(member):
    print(f'{member.name} has joined the server')
    channel = client.guilds[0].get_channel(CHANNEL ID)
    print(channel)
    await channel.send(f'{member.name} has joined the server')

@client.event
async def on_member_remove(member):
    print(f'{member.name} has left the server')
    channel = client.guilds[0].get_channel(CHANNEL ID)
    print(channel)
    await channel.send(f'{member.name} has left the server')

client.run('TOKEN HERE')

3 个答案:

答案 0 :(得分:1)

而不是 member.name 使用 member ,如果这不起作用,请在您有变量的地方添加它 intents = discord.Intents(messages = True, guilds = True, reactor = True, members = True, Presences = True) 客户端 = 命令.Bot(command_prefix = '*', 意图 = 意图)

答案 1 :(得分:0)

您忘记了装饰工的括号。

@client.event

应该是

@client.event()

编辑:显然不是。 OP会提供更多信息时,将更新此答案。

答案 2 :(得分:0)

FOR discord.py> = 1.5

1.5添加了对Gateway Intents的支持,默认情况下,您的机器人无法像以前的版本那样访问公会成员。如果您的漫游器在少于100台服务器中,则无需验证即可启用这些意图。您应该在Discord Developer Portal的Bot页面底部看到这些设置。如果同时启用了两者,则需要像这样更改Client(或commands.Bot)实例化:

intents = discord.Intents.all()
client = discord.Client(intents=intents)

当我对此进行测试时,该事件正在触发,但是我敢打赌,您的问题出在行中:

channel = client.guilds[0].get_channel(CHANNEL ID)

仅使用client.get_channel来确保您实际上正在获取目标频道会更加可靠,不和谐上的所有频道ID都是唯一的,因此您无需使用公会对象。另外,CHANNEL ID并不是有效的变量,但我猜您只是对其进行了修改。