如何让 Discord Bot 选择频道

Posted

技术标签:

【中文标题】如何让 Discord Bot 选择频道【英文标题】:How to Have a Discord Bot Select a Channel 【发布时间】:2020-03-12 22:00:30 【问题描述】:

好的,所以我想知道是否有人知道我将如何让机器人选择频道。我正在为不和谐创建一个多服务器机器人,并且想知道如何使用命令选择角色/频道。例如,我有这个自动角色成员的代码:

client.on("guildMemberAdd", member => 

    //Change "RoleName" tto the role yoou want to give them
    var role = member.guild.roles.find ("name", "RoleName")
    member.addRole (role)
        if (role = null)
        return;
)

现在,显然不是每个服务器都将其成员角色设置为“RoleName”,所以我想知道的是,我如何让机器人通过命令选择他们希望赋予新成员的角色。因此,如果他们要这样做:“cb!auto​​role set Member”,它将使该角色成为他们自动赋予新成员的角色,但如果其他服务器中的某人执行“cb!auto​​role set Newbie”,它将使服务器自动角色,无需更改或添加不同的服务器自动角色。

频道也是如此。示例:“cb!welcome set #welcome”它会设置服务器欢迎消息频道,而不更改或添加不同的服务器选择频道。

我也想知道如何取消设置它们。示例:“cb!unset welcome”和“cb!unset autorole”,当然它只会取消设置该服务器的内容。

如果解释太长但你知道链接,请与我分享。

如果这令人困惑,如果您对我的意思有任何疑问,我很抱歉,请发表评论。我是编码新手,所以我可能弄错了一些术语。

感谢您抽出宝贵时间阅读本文。

【问题讨论】:

【参考方案1】:

你应该使用数据库来设置频道(例如频道id/角色id)然后你可以这样做:

var chan = member.guild.channels.get(channelid).catch(console.error);
if(chan) chan.send(`welcome $member to the server`);

var role = member.guild.roles.get(roleid).catch(console.error);
if(role) member.addRole(role);

如果您对数据库不是很熟悉,我建议您使用quick.db。然后就可以了

const db = require("quick.db");
client.on("message", message => 
    const args = message.content.slice(prefix.length).trim().split(/ +/g);
    const command = args.shift().toLowerCase();
    if(command == "setautorole")
        let roleName = args.slice(0).join(" ");
        let role = message.guild.roles.find(role => role.name == roleName).catch(message.reply("Couldn't find that role")
        db.set(`autorole_$message.guild.id`, role.id)
    
    if(command == "unsetautorole")
        db.delete(`autorole_$message.guild.id)
    
    if(command == "setwelcomechannel")
        let channelName = args.slice(0).join(" ");
        let channel = message.guild.channels.find(channel => channel.name == channelName).catch(message.reply("Couldn't find that channel")
        db.set(`welcomechannel_$message.guild.id`, channel.id)
    
    if(command == "unsetwelcomechannel")
        db.delete(`welcomechannel_$message.guild.id)
    
)
client.on("guildMemberAdd", member => 
    let roleId = db.get(`autorole_$member.guild.id`);
    if(roleId) member.addRole(roleId).catch(console.error);
    let channelId = db.get(`welcomechannel_$member.guild.id`);
    if(channelId) channel = member.guild.channels.get(channelId).catch(console.error);
    if(channel) channel.send("x")
)

设置角色 设置欢迎频道

当然,您可以修改它以使用其他方式保存它。

【讨论】:

好的,谢谢,我会测试一下。你知道我可以使用任何教程链接来教我如何使用 quick.db 做我想做的事情吗? npm page 应该提供足够的信息,或者只是 a google search 提供足够的教程 顺便说一句,我刚输入第二行代码,就遇到了很多错误。都是',' expected 哦,很抱歉没有回复,但是在捕获后缺少) 希望您已经找到它xd

以上是关于如何让 Discord Bot 选择频道的主要内容,如果未能解决你的问题,请参考以下文章

Discord Bot公告频道

Discord BOT with Python,如何让它在我们发送命令的频道中回复(完成)

如何让基于 Python 的 Discord Bot 随机播放不同的声音?

Discord .net Bot 创建私人频道

如何让bot在反应后将消息发送到另一个频道|不和谐.js

Discord bot:如何在语音频道中播放 mp3 文件