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

如何在discord.py中实现终端输入发至指定频道并接收消息

使用discord.py实现终端输入发消息+监听打印聊天内容

一、从终端输入发送到指定Discord频道

核心是在不阻塞discord.py异步事件循环的前提下,单独开线程处理终端输入,避免卡住机器人的事件监听逻辑:

  1. 提前获取机器人Token(Discord开发者门户获取)和目标频道ID(开启开发者模式后右键频道复制)
  2. 用线程循环读取终端输入,输入内容直接发送到指定频道;输入exit可退出程序

二、监听并打印其他用户的聊天内容

需要监听on_message事件,注意discord.py v2.0+必须开启message_content意图才能读取消息内容,还要在Discord开发者门户的机器人设置里手动开启这个权限。

完整代码示例

import discord
import asyncio
import threading

# 替换为你的机器人Token
TOKEN = "你的机器人Token"
# 替换为目标频道的整数ID
TARGET_CHANNEL_ID = 123456789012345678

# 配置机器人意图,必须开启message_content才能读取消息内容
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)

def terminal_input_handler():
    """处理终端输入的线程函数"""
    while True:
        user_input = input("输入要发送的消息(输入exit退出):")
        if user_input.lower() == "exit":
            asyncio.run_coroutine_threadsafe(client.close(), client.loop)
            break
        # 获取目标频道对象
        channel = client.get_channel(TARGET_CHANNEL_ID)
        if channel:
            # 异步发送消息到指定频道
            asyncio.run_coroutine_threadsafe(channel.send(user_input), client.loop)
        else:
            print("未找到指定频道,请检查ID是否正确")

@client.event
async def on_ready():
    print(f"已登录为 {client.user}")
    # 启动终端输入处理线程
    threading.Thread(target=terminal_input_handler, daemon=True).start()

@client.event
async def on_message(message):
    # 忽略机器人自身发送的消息,避免循环触发
    if message.author == client.user:
        return
    # 自定义打印格式,按需调整
    print(f"[{message.channel.name}] {message.author.name}:{message.content}")

# 启动机器人
client.run(TOKEN)

关键注意事项

  • 安装最新版discord.py:pip install discord.py
  • 必须在Discord开发者门户的「Bot」页面开启「Message Content Intent」权限
  • 邀请机器人到服务器时,要勾选「发送消息」「读取消息历史」等必要权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:15:34