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

如何让Discord Bot从短语列表随机选内容发送给指定用户?附故障代码

问题修复方案

原代码存在的问题

  • 重复定义on_message事件,后定义的事件会直接覆盖前一个,导致&hello指令完全失效
  • 没有导入random模块,调用random.choice时会直接抛出模块不存在的错误
  • 短语列表仅在匹配到指定用户ID的分支内定义,当触发事件的用户不是目标用户时,list变量未定义,执行发送逻辑时会报错
  • 使用list作为变量名,会覆盖Python内置的列表类型,属于不规范的命名习惯
  • 发送消息的逻辑没有缩进在匹配指定用户ID的分支内,不管是不是目标用户都会尝试发送消息,不符合业务需求

修复后可用代码

import discord
import os
import random  # 新增导入random模块

client = discord.Client()

@client.event
async def on_ready():
  print('We are live as {0.user}'.format(client))

# 合并两个on_message事件,避免覆盖
@client.event
async def on_message(message):
    if message.author == client.user:
        return

    # 原&hello指令逻辑
    if message.content.startswith('&hello'):
        await message.channel.send('Hello There')
        return
    
    # 目标用户匹配逻辑
    target_user_id = 295365551499247618
    if message.author.id == target_user_id:
        # 避免和内置类型重名,修改变量名为phrase_list
        phrase_list = ["Oye callate","Quien te pregunto", "A nadie le importa", "Muerete", "Vete pa la pinga","Callate"]
        # 发送逻辑缩进在分支内,仅匹配到目标用户才发送
        await message.channel.send(random.choice(phrase_list))

client.run('TOKEN')

额外注意事项

如果你使用的是discord.py v2.0及以上版本,需要额外添加意图(Intents)配置,开启消息内容读取权限,否则on_message事件无法正常触发。
不要把机器人TOKEN硬编码在代码里,建议通过环境变量读取,避免泄露。

内容的提问来源于stack exchange,提问作者Juan Ramon Mendoza Botello

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:06:04