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

如何在Python Discord机器人开发中导入并正确使用ctx参数?

问题修复方案

错误原因

  • 你导入的ctx是完全无关的第三方模块,discord.py中的ctx是命令框架的上下文对象,不需要主动导入,只有使用@commands.command装饰的命令函数才会自动传入ctx参数。
  • 你当前使用的是on_message原生消息事件,触发时传入的参数就是message对象,不需要通过ctx获取消息所属服务器。

修复步骤

  1. 删掉代码中import ctx这一行
  2. 将guild = ctx.message.guild替换为guild = message.guild,直接使用事件传入的message对象即可获取所属服务器
  3. 修正if message.content.startswith("")的判断条件:空串会匹配所有消息,意味着任何用户发任何内容都会触发创建频道,建议修改为自定义触发指令,例如if message.content.startswith("!创建频道")
  4. 调整最后两行代码顺序:client.run()会阻塞程序执行,后面的my_secret = os.environ['TOKEN']永远不会运行,如果你需要单独保存token可以把这行挪到client.run()前面,不需要的话可以直接删除无用的my_secret赋值行。

修正后的完整代码

import discord
import os

client = discord.Client()

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))


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

    # 这里替换为你想要的触发指令
    if message.content.startswith("!create_channel"):
        print(message.content)
        guild = message.guild
        await guild.create_text_channel('cool-channel')

# 如果你需要单独存token可以取消下面这行注释
# my_secret = os.environ['TOKEN']
client.run(os.getenv('TOKEN'))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:45:03