discord.js从v12升级至v13后机器人加入服务器欢迎消息失效及弃用警告问题
Discord.js v13 服务器欢迎消息失效问题修复
嘿,我看了你的代码和报错信息,这完全是discord.js从v12升级到v13后的API变更导致的,下面给你梳理清楚问题和修复方案:
核心问题点
- 频道集合访问逻辑变了:v13里
guild.channels是一个GuildChannelManager管理对象,不再是直接可遍历的集合,必须通过cache属性才能访问已缓存的频道列表 - 频道类型枚举更新:文本频道的类型标识从
'text'改成了全大写的'GUILD_TEXT',v13统一使用枚举值来标识频道类型 - 消息发送格式变更:v13中发送Embed不能直接传对象,必须把Embed放在
embeds数组里作为参数传入 - 另外你看到的
message事件弃用警告,虽然和当前欢迎消息无关,但也提一句:如果代码里还有bot.on('message', ...)的逻辑,要改成bot.on('messageCreate', ...),这是v13的强制要求
修改后的完整代码
const { MessageEmbed, WebhookClient } = require("discord.js"); const { channels } = require("../../app"); const { prefix, color } = require("../../botconfig/config.json"); module.exports = async (bot) => { bot.on('guildCreate', (guild) => { let channelToSendTo; // 访问channels的cache属性遍历频道 guild.channels.cache.forEach(channel => { // 使用GUILD_TEXT判断文本频道类型 if (channel.type === 'GUILD_TEXT' && !channelToSendTo && channel.permissionsFor(guild.me).has('SEND_MESSAGES')) channelToSendTo = channel; }); if(!channelToSendTo) return; let newGuildEmbed = new MessageEmbed() .setColor(color) .setTitle(`<:Ela_E:888341177571639297> Thank you for adding me!`) .addField(`Premium`, `[Buy](https://elabot.top/premium)`, true) .addField(`Website`, `[Website Page](https://elabot.top)`, true) .addField(`Have questions?`, `[Join the support server](https://elabot.top/support)`, true) // v13要求Embed放在embeds数组中发送 channelToSendTo.send({ embeds: [newGuildEmbed] }) }) }
把这些改动都应用后,你的服务器欢迎消息功能就能正常工作了,那个弃用警告也会在你把所有message事件改成messageCreate后消失。
内容的提问来源于stack exchange,提问作者MihaiT
相关产品推荐
相关产品推荐

