Discord 当会员有10个邀请时,我如何添加角色?

Discord 当会员有10个邀请时,我如何添加角色?,discord,discord.js,Discord,Discord.js,我用discord.js v12制作discord机器人,当成员有10个邀请时,我尝试赋予角色 我从中找到了邀请代码并对其进行了修改: if(message.channel.type != "dm" && message.channel.id === '768475421953915093') { message.delete(); var user = message.author; message.guild.fetchInvites()

我用discord.js v12制作discord机器人,当成员有10个邀请时,我尝试赋予角色

我从中找到了邀请代码并对其进行了修改:

if(message.channel.type != "dm" && message.channel.id === '768475421953915093') {
message.delete();
var user = message.author;

    message.guild.fetchInvites()
    .then

    (invites =>
        {
            const userInvites = invites.array().filter(o => o.inviter.id === user.id);
            var userInviteCount = 0;
            for(var i=0; i < userInvites.length; i++)
            {
                var invite = userInvites[i];
                userInviteCount += invite['uses'];
            }
                if(userInviteCount >= 10){
                const guildMember = message.member;
                guildMember.addRole('767542365812886656');
                message.author.send(`you have access now`)
            }else {
              message.author.send(`sry u have ${userInviteCount} invitations. u need at least five`)
            }
    }
    )
 }
if(message.channel.type!=“dm”&&message.channel.id==“768475421953915093”){
message.delete();
var user=message.author;
message.guild.fetchinvests()
.那么
(邀请=>
{
const userInvites=invites.array().filter(o=>o.inviter.id==user.id);
var userInviteCount=0;
for(var i=0;i=10){
const guildMember=message.member;
guildMember.addRole('767542365812886656');
message.author.send(`you have access now`)
}否则{
message.author.send(`sry您有${userInviteCount}个邀请。您至少需要五个`)
}
}
)
}

是的,它可以工作,但你可以很容易地欺骗系统。如果继续从服务器重新加入,邀请计数器将增加。如何才能阻止这种情况发生?

要做到这一点,您需要一个外部数据库,因为Discord API不提供任何有关谁使用了该邀请以及使用了多少次的信息

提醒:这是一个简单的功能,但对于没有任何编码经验的人来说可能非常困难,所以如果这是你的第一个项目,不要放弃并继续尝试!:D

你可以使用,这是非常简单和免费的

逻辑将非常简单:

1-创建一个集合来存储邀请数据,您可以在

2-创建一个集合(您可以给出任何名称,但在本例中,我将此集合称为
new_members
)来存储新成员数据,它应该有
serverId
(存储公会ID)、
userId
(存储用户ID)和
inviteCode
(存储邀请代码或url)字段

3-当用户加入discord服务器时,它将触发“guildMemberAdd”事件,您将获得所使用的邀请(以我在第一步中给出的示例为例),并在
new_members
集合中创建一个新文档

4-创建新数据后,您将搜索来自同一邀请的所有文档,并按用户ID对其进行筛选(有很多方法可以做到这一点,)

5-通过这个文档数组,您可以使用他的长度来确定邀请了多少人,并指定角色

非常简单的例子,不应该使用:

DiscordClient.on(“guildMemberAdd”,异步(成员)=>{
/**
* https://github.com/AnIdiotsGuide/discordjs-bot-guide/blob/master/coding-guides/tracking-used-invites.md
*在这里,您将获得所使用的invite,并将其存储在“inviteCode”变量中
*/
const inviteCode=wait getInviteUsed()
等待NewMemberRepository.insert({
serverId:member.guild.id,
userId:member.id,
inviteCode:inviteCode
});
const joinedmembers fromtheinvite=wait NewMemberRepository.find({
inviteCode:inviteCode
});
/**
* https://stackoverflow.com/questions/43374112/filter-unique-values-from-an-array-of-objects
*在这里,您将按用户ID筛选结果
*/
const invitesWithUniqueUsers=filterJoinedMembersByUserId(joinedMembers)
if(invitesWithUniqueUsers>=必需的\u INVITES\u QTD){
/**
*将角色授予邀请的创建者
*/
}
});
希望有帮助,祝你好运D


OBS:

  • 是的,Discord API提供了一个邀请的使用次数,但没有提供一个特定的人使用这个邀请的次数
  • 在示例中,我使用了类似的内容,但如果您使用JavaScript而不是TypeScript,则可以使用