如何用Python编写Discord机器人监听RPG bot并在群活动时@全员提醒
Python Discord活动提醒机器人代码修正方案
代码问题修复点
- 补全缺失的依赖导入:新增
os模块导入适配你调用的os.environ环境变量取值逻辑,引入asyncio用非阻塞的asyncio.sleep替换原time.sleep,避免阻塞机器人整个事件循环 - 补全
on_ready回调的@client.event装饰器,否则机器人登录成功后不会触发对应打印逻辑 - 修复原代码的缩进错误:原代码两个关键词判断的行首多了1个空格,会直接抛出语法错误
- 新增RPG Bot专属过滤逻辑:只监听指定RPG机器人发布的消息,避免普通用户发送带关键词的内容误触发提醒,你需要将代码中
RPG_BOT_ID替换为你要监听的RPG机器人的实际用户ID - 优化关键词匹配逻辑:统一转小写判断避免大小写差异导致的漏判,合并重复触发逻辑避免同一条活动消息发送两次艾特提醒
- 新增消息内容权限声明:Discord新版API要求显式开启消息内容读取权限,你需要先在Discord开发者后台的Bot设置页打开
Message Content Intent开关,代码初始化时也需要显式声明对应意图
修正后完整代码
import os import asyncio import discord # 填写你要监听的RPG机器人的用户ID RPG_BOT_ID = 123456789012345678 # 声明所需权限 intents = discord.Intents.default() intents.message_content = True client = discord.Client(intents=intents) @client.event async def on_ready(): print('Logged in As {0.user}'.format(client)) @client.event async def on_message(message): # 过滤自身消息、非指定RPG Bot的消息 if message.author == client.user or message.author.id != RPG_BOT_ID: return msg = message.content.lower() # 匹配活动关键词 if 'event' in msg: await asyncio.sleep(2) await message.channel.send("@everyone 活动开始啦,快来参与!") client.run(os.environ['token'])
内容的提问来源于stack exchange,提问作者PyTry
相关产品推荐
相关产品推荐

