同样,我的代码没有赶上,我不知道为什么...... 控制台没有显示错误。
这是我的代码:
@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)
答案 0 :(得分:0)
代码片段中有不止一个问题。我将在此处列出所有修复程序。
author
声明了一个 ctx.author.name
变量,这里的 ctx
是什么? ctx
仅在命令中传递。这是一个事件。它使用 member
作为参数,但您不能在此处使用 ctx
。member
的问题。同样 member
是一个对象,您不能直接使用它,您必须将属性放在您需要的成员之后,例如 member.name
、member.mention
、member.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
参考: