discord.py - 加入/离开消息错误,不起作用

时间:2021-02-12 15:04:24

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

同样,我的代码没有赶上,我不知道为什么...... 控制台没有显示错误。

这是我的代码:

@bot.event
async def on_member_join(member):
    channel = bot.get_channel(792786709350973454)
    author = ctx.message.author
    ico = author.avatar_url
    embed = discord.Embed(
        color = discord.Color.red(),
    )
    embed.set_author(name=(f'• Hello {member} on my server!!'))
    embed.add_field(name='Warning,', value='read the regulations!', inline=False)
    embed.set_footer(text="dBot created by Diablo#4700", icon_url=ico)
    await channel.send(embed=embed)

1 个答案:

答案 0 :(得分:0)

代码片段中有不止一个问题。我将在此处列出所有修复程序。

  • 首先,主要问题是您使用 author 声明了一个 ctx.author.name 变量,这里的 ctx 是什么? ctx 仅在命令中传递。这是一个事件。它使用 member 作为参数,但您不能在此处使用 ctx
  • 其次,下一个问题并没有真正影响停止命令输出,而是您在嵌入作者消息中发送 member 的问题。同样 member 是一个对象,您不能直接使用它,您必须将属性放在您需要的成员之后,例如 member.namemember.mentionmember.avatar_url

固定代码:

@bot.event
async def on_member_join(member):
    channel = bot.get_channel(792786709350973454)
    # author = ctx.message.author # first problem, you don't really need this line 
    ico = member.avatar_url # since above line is useless you would change this line too
    embed = discord.Embed(
        color = discord.Color.red(),
    )
    embed.set_author(name=f'• Hello {member.name} on my server!!') # second problem was here.
    embed.add_field(name='Warning,', value='read the regulations!', inline=False)
    embed.set_footer(text="dBot created by Diablo#4700", icon_url=ico)
    await channel.send(embed=embed)

我已经用注释标记了错误。

(重要)意图:
以防万一您不知道,您需要特权网关意图才能跟踪成员事件。确保从 Discord 的 Developers Portal 的应用程序中的 bot 部分启用这两种意图,然后在顶部的代码中(您正在初始化 bot 的位置)...

import discord
from discord.ext import commands

client= commands.Bot(command_prefix="prefix", intents=discord.Intents.all()) 

...
# rest of the code

参考:

on_member_join event
context or ctx
Intents Discord.Py