使用Discordia开发Lua机器人时,print(message.content)返回nil或空白
Discordia机器人message.content返回nil/空白的解决方法
1. 开启Message Content Intent权限
Discord的权限政策要求机器人必须开启Message Content Intent才能读取消息内容:
- 登录Discord开发者门户,进入你的应用Bot页面
- 在
Privileged Gateway Intents区域,开启Message Content Intent - 重新生成机器人邀请链接,确保包含读取消息内容的权限(可通过权限生成器勾选对应选项)
2. 过滤无内容的系统消息
成员加入通知、频道变更提醒这类系统消息本身没有content属性,会返回nil。可以在代码中先判断消息发送者是否为人类用户,过滤这类消息:
client:on('messageCreate', function(message) -- 仅处理人类用户发送的消息 if not message.author.bot then local Content = message.content print(Content) if Content:lower() == '!ping' then message:reply('Pong!') end end end)
3. 初始化客户端时声明必要网关意图
创建Discordia Client时必须显式添加messageContent意图,否则无法获取消息内容:
local discordia = require('discordia') -- 初始化客户端时指定所需意图 local client = discordia.Client({ intents = { discordia.Intents.guilds, discordia.Intents.guildMessages, discordia.Intents.messageContent -- 必须包含此意图 } }) client:on('ready', function() print('Logged in as '.. client.user.username) end) client:on('messageCreate', function(message) if not message.author.bot then local Content = message.content print(Content) if Content:lower() == '!ping' then message:reply('Pong!') end end end) client:run('Bot '..TOKEN)
内容的提问来源于stack exchange,提问作者Adrian Miałkowski
相关产品推荐
相关产品推荐

