Discord.js实现Twitch超时用户消息删除,如何限制仅指定账号触发逻辑
你只需要在原有逻辑的最外层增加发送者用户名校验,仅允许用户名为User Timed Out的指定Webhook账号触发删除流程即可修复漏洞。
修改后的完整代码如下:
discordClient.on('messageCreate', async (message) => { async function dt() { // 新增发送者身份校验,非指定账号直接跳过逻辑 if (message.author.username !== 'User Timed Out') return if (message.content.includes('has been timed out for')){ const user = message.content.split(" ")[1] const time = message.content.split(" ")[7] if (message.content === `** ${user} has been timed out for ${time} seconds.**`) { const messages = await message.channel.messages.fetch({ limit: 20 }) const toDeleteMsgs = messages.filter(m => m.author.username.toLowerCase() === user.toLowerCase()) await message.channel.bulkDelete(toDeleteMsgs) console.log('cleared messages') } } } try { await dt() } catch (error) { console.error('处理超时删除逻辑出错:', error) } });
修改说明:
- 新增的身份校验会直接过滤所有非指定Webhook账号发送的消息,普通用户即使发送完全匹配格式的内容也不会触发删除逻辑,彻底解决恶意触发的安全问题
- 优化了原有代码混合async/await与then的写法,逻辑更清晰易维护
- 修复了原有错误捕获写法错误的问题,新增异常日志打印方便后续排查问题
- 调整了内部变量名,避免和外层的message变量产生命名冲突
内容的提问来源于stack exchange,提问作者Dancing Potato
相关产品推荐
相关产品推荐

