【问题标题】:Discord.js v12 Bot Say Command in different channel (via args?)Discord.js v12 Bot Say Command 在不同的频道(通过 args?)
【发布时间】:2020-09-06 19:58:29
【问题描述】:

我正在寻找一些帮助/方向/建议...我在这里有我的不和谐机器人说命令,我花了一段时间才把它弄到这一步并正常工作。我正在寻找的是调整当前代码,以便我可以检查“.say”之后的单词是否是“#channel”,如果是,则将消息发送到那里。即“.say #feedback your welcome” ....... 会导致机器人在反馈频道中说“欢迎您”ELSE 只需在同一频道内发送消息即可。我希望我已经正确地解释了自己,但这超出了我的想象,我试图尽可能多地进行研究。提前感谢您的宝贵时间

        case 'say':
                if (!message.member.roles.cache.find(r => r.name === 'Moderator') && !message.member.roles.cache.find(r => r.name === 'Staff')) return message.channel.send('You dont not have the required permissions').then(msg => {
                    msg.delete({ timeout: 5000 })
                })
                else if (message.content.startsWith(".say")) {
                    if (message.deletable) {
                        message.delete();
                    }
                    if (!args[1]) return message.channel.send("Nothing to say").then(msg => {
                        msg.delete({ timeout: 5000 })

                    })
                    message.channel.send(`${(args.slice(1).join(" "))}`)

【问题讨论】:

    标签: if-statement arguments discord discord.js


    【解决方案1】:

    要检查传入消息中是否提及频道,您可以使用返回MessageMentions 对象的Message.mentions 属性。

    MessageMentions.channels 返回消息中提及的GuildChannel 中的Collection

    所以要检查消息中是否至少提到了一个频道:

    if (message.mentions.channels.size > 0) {
       // There is at least 1 channel mention in the message.
    } else {
       // No channel mention in the message.
    }
    

    向第一个频道提及发送消息:

    message.mentions.channels.first().send("message");
    

    【讨论】:

    • 非常感谢,我完全走错了路来实现我想要的。我想在我的脑海中我曾认为我想要类似的东西.... 将 args[2] 拆分为前面的 # 并从频道 ID 等中删除 > ...
    • 不客气,创建一个子字符串来获取频道 ID 以获取公会中的频道是可行的,但正如您所看到的,模块中已经有了更方便的方法/属性。
    猜你喜欢
    • 2021-09-21
    • 2021-04-14
    • 2020-11-14
    • 2020-12-08
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 2022-11-26
    • 2020-11-06
    相关资源
    最近更新 更多