簡體   English   中英

我的 autorole 代碼不起作用,我不明白為什么

[英]My code for autorole doesn't work and I can't figure out why

const { Client,  Intents } = require("discord.js");

const client = new Client({
    intents: ["DIRECT_MESSAGES", "GUILDS", "GUILD_MEMBERS"],
    presence: {
        status: "online",
        activities: [{
            name: "markets",
            type: "WATCHING"
        }]
    },
});

client.on('ready', () => { 
    console.log(`Launched as a bot: ${client.user.tag}!`);
});


client.on('guildMemberAdd', member => {
    function roleAdd() {
        member.roles.add(member.guild.roles.cache.get(process.env.SERVER_ROLE_ID));
    }
    roleAdd();
});

client.login(process.env.DJS_TOKEN);

伙計們,我寫了這段代碼,但它不起作用。 我沒有收到任何錯誤。 我希望它在用戶加入我的服務器時添加一個角色。 機器人的狀態正在工作。 我認為問題出在guildMemberAdd部分。

我不太確定為什么要為此使用嵌套函數的方法。 如果您希望事件調用 function,請將 function 移到事件之外,然后在參數中創建GuildMember

或者完全丟棄事件並單獨保留普通的#<GuildMemberRoleManager>.add方法。

我建議后者,因為我假設嵌套的 function 聲明不會起作用。

如果你想為你的服務器使用自動角色添加,請嘗試最簡單的方法來添加角色,就像給成員賦予角色一樣

當您為特定成員賦予角色時,應該如下所示:

const role = message.guild.roles.cache.find(role => role.id === process.env.SERVER_ROLE_ID)
const target = message.mentions.members.first() || await message.guild.members.cache.get(args[0])

如果 bot 給出的角色higher than the bot or equal to bot 您將收到諸如“缺少權限”之類的錯誤。為防止出現這種情況,您需要輸入代碼以將其返回

if(!target.moderatable) return message.reply("I can't mute this person!")

此命令與自動賦予角色的方式相同,只是添加/編輯/刪除了幾行代碼。

client.on('guildMemberAdd', member => {
function roleAdd() {
    member.roles.add(member.guild.roles.cache.get(process.env.SERVER_ROLE_ID));
}
roleAdd();
});
- function roleAdd() {}
+ let role = member.guild.roles.cache.find(role => role.id == process.env.SERVER_ROLE_ID)
+ member.roles.add(role).catch()

.catch()行是為了防止出錯並關閉你的機器人。

client.on('guildMemberAdd', member => {
let role = member.guild.roles.cache.find(role => role.id == process.env.SERVER_ROLE_ID)
member.roles.add(role).catch()
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM