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

Discord.py on_member_join()无法向指定频道发送消息的问题

问题解决方法

核心原因

channel返回None,说明机器人找不到指定频道,以下是具体修复步骤:

1. 修正频道ID的类型与取值

client.get_channel()要求传入整数类型的频道ID,不能用字符串,也不能保留占位符:

  • 把代码里的我的频道ID替换成你实际的数字频道ID(比如123456789012345678),不要加引号。
    修正后的代码片段:
@client.event
async def on_member_join(member):
    print("Somebody joined")
    channel = client.get_channel(123456789012345678)  # 替换为你的数字频道ID
    await channel.send(f"欢迎{member.mention}加入服务器!")

2. 补充缺失的模块导入

代码里使用了discord.Intents()但未导入discord模块,会导致运行报错,需在开头添加:

import discord
from discord.ext import commands

3. 确认机器人权限与频道可见性

  • 给机器人角色分配目标频道的发送消息权限,可在服务器设置的「权限」面板操作。
  • 确保目标频道不是机器人无法访问的私有频道。

4. 开启Discord开发者后台的成员意图

仅在代码里开启intents.members = True不够,还要登录Discord开发者平台,进入机器人页面找到「Privileged Gateway Intents」,开启Server Members Intent,否则on_member_join事件可能无法正常触发。

完整修正后的代码

import discord
from discord.ext import commands

intents = discord.Intents.default()
intents.members = True

client = commands.Bot(command_prefix='!', intents=intents)

@client.event
async def on_ready():
    print("The bot logged on")
    print("-----------------")

@client.event
async def on_member_join(member):
    print(f"{member.name} joined")
    channel = client.get_channel(123456789012345678)  # 替换为你的频道ID
    if channel:  # 先判断频道是否存在,避免报错
        await channel.send(f"欢迎{member.mention}来到服务器!")
    else:
        print("无法找到指定频道")

client.run("你的机器人Token") 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:36:16