You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.py同时使用Bot与Client导致欢迎功能失效问题咨询

问题原因

discord.ext.commands.Bot是discord.Client的子类,本身完整兼容Client的所有事件、接口方法,不需要同时实例化两个客户端对象。你之前的代码里把入服欢迎事件绑定在了独立的client实例上,但最后只调用了bot.run()启动Bot实例,绑定在client上的事件逻辑根本不会被执行。

你之前的尝试存在两个明确错误:

  • 给Bot实例初始化的时候没有传入配置好的intents参数,就算把事件挂到bot上也收不到成员加入事件
  • 把Bot替换成discord.Client()之后,Client本身不支持命令装饰器,昵称修改的命令功能自然会失效
修正后的完整代码
import discord
from discord.ext import commands
import os

# 配置网关权限
intents = discord.Intents.default()
intents.members = True

# 仅初始化一个Bot实例,传入命令前缀和intents配置
bot = commands.Bot(command_prefix="!", intents=intents)

# 成员加入事件直接绑定到bot实例,写法和Client完全一致
@bot.event
async def on_member_join(member):
    print("member join")
    channel = bot.get_channel(929370329363644506)
    await channel.send(f"{member.mention} Welcome to our server! Please check <#556206910794366988> and set your name and rank based on your ingame name and rank")

# 昵称修改命令
@bot.command()
@commands.has_permissions(change_nickname=True)
async def nick(ctx, *, nickname):
    member = ctx.author
    await member.edit(nick=nickname)
    await ctx.send(f"Nickname was changed to {member.mention}.")

if __name__ == "__main__":
    my_secret = os.environ['TOKEN']
    bot.run(my_secret)
必要配置检查
  • 必须前往Discord开发者后台,进入对应机器人的Bot设置页,找到「Privileged Gateway Intents」分区,打开Server Members Intent开关,否则代码层面配置了intents也无法接收成员加入事件
  • 后续开发所有事件、命令、定时任务都统一绑定到这一个bot实例上即可,不需要再创建额外的Client对象,Bot完全支持所有Client原生的API调用,不需要做特殊改写

内容的提问来源于stack exchange,提问作者KDK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.16 16:15:41