我使用discord.js v12制作了Discord机器人,并在成员有10条邀请时尝试提供角色
我从here找到了邀请代码,并对其进行了修改:
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`)
}
}
)
}
是的,它可以工作,但是您可以轻松地欺骗系统。如果您继续从服务器重新加入,则邀请计数器将增加。我该如何阻止?
答案 0 :(得分:1)
为此,您将需要一个外部数据库,因为Discord API不会提供有关谁用于邀请以及多少次的任何信息。
ALERT:这是一个简单的功能,但是对于没有任何编码经验的人来说可能很难,因此,如果这是您的第一个项目,请不要放弃并继续尝试! :D
您可以使用MongoDB Atlas,它非常简单而且免费。
逻辑将非常简单:
1-创建一个集合来存储邀请数据,您可以在this example
中进行类似操作 2-创建一个集合(您可以输入任何名称,但是在本示例中,我将这个集合称为new_members
)来存储新成员数据,它应该具有字段serverId
(用于存储行会ID),userId
(用于存储用户ID)和inviteCode
(用于存储邀请代码或网址)
3-当用户加入discord服务器时,它将触发“ guildMemberAdd”事件,您将获得使用的邀请(与我在第一步中给出的示例一样),并在其中创建一个新文档new_members
集合。
4-创建新数据后,您将在同一邀请中搜索所有文档,并按userId进行过滤(有多种方法可以使用this is one of them)。
5-使用这一系列文档,您可以利用他的长短来确定邀请了多少人并指定职位。
非常简单的示例,不应使用:
DiscordClient.on("guildMemberAdd", async (member) => {
/**
* https://github.com/AnIdiotsGuide/discordjs-bot-guide/blob/master/coding-guides/tracking-used-invites.md
* Here you will get the invite that was used, and store in the "inviteCode" variable
*/
const inviteCode = await getInviteUsed()
await NewMemberRepository.insert({
serverId: member.guild.id,
userId: member.id,
inviteCode: inviteCode
});
const joinedMembersFromTheInvite = await NewMemberRepository.find({
inviteCode: inviteCode
});
/**
* https://stackoverflow.com/questions/43374112/filter-unique-values-from-an-array-of-objects
* Here you will filter the results by userId
*/
const invitesWithUniqueUsers = filterJoinedMembersByUserId(joinedMembers)
if (invitesWithUniqueUsers >= REQUIRED_INVITES_QTD) {
/**
* Gives the role to the creator of the invite
*/
}
});
希望有帮助,祝您好运! :D
OBS: