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

discord.py开发RickRoll检测器:如何检查消息是否包含列表内文本

RickRoll检测器代码修复方案

现有代码存在的问题

  • banned列表定义错误:将两个禁用ID放在同一个字符串元素中,后续添加新条目也会无法正确匹配
  • 匹配逻辑完全错误:if banned in i 是判断整个列表对象是否存在于字符串中,语法逻辑均不成立,正确逻辑应为判断当前处理的内容是否包含banned列表中的任意元素
  • 缩进错误:on_message 事件下的for循环、await bot.process_commands(msg) 均未正确缩进,代码运行时会直接抛出语法错误

修正后代码

import discord
from discord.ext import commands
from async_rickroll_detector import RickRollDetector

# 每个禁用ID单独作为列表元素,后续新增直接追加即可
banned = ["dQw4w9WgXcQ", "rW7hXs-81hM"]
BOT_TOKEN = "<TOKEN>"
RICKROLL_FOUND_MESSAGE = "⚠️ Rickroll Alert ⚠️"

bot = commands.Bot(command_prefix = ">", intents = discord.Intents.default())

@bot.event
async def on_ready():
   global detector
   detector = RickRollDetector()

@bot.event
async def on_message(msg):
    # 缩进修正:所有事件内逻辑都要缩进一层
    for i in msg.content.split(" "):
        i = i.replace("<","").replace(">", "") 
        # 匹配逻辑修正:判断当前内容是否包含任意禁用条目,同时满足检测器规则
        if any(ban_word in i for ban_word in banned) and await detector.find(i):
            await msg.reply(RICKROLL_FOUND_MESSAGE)
            break
    # 缩进修正:属于on_message内的逻辑,要和for循环同级缩进
    await bot.process_commands(msg)

bot.run(BOT_TOKEN)

补充说明

后续需要新增禁用内容时,直接在banned列表中追加新的字符串元素即可,无需修改其他匹配逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 20:57:04