Plugin
FriendInvites
Create and manage friend invite links via slash commands (/create friend invite, /view friend invites, /revoke friend invites).
1
import { ApplicationCommandInputType, sendBotMessage } from "@api/Commands";2
import { Devs } from "@utils/constants";3
import definePlugin from "@utils/types";4
import { findByPropsLazy } from "@webpack";5
6
const FriendInvites = findByPropsLazy("createFriendInvite");7
8
export default definePlugin({9
name: "FriendInvites",10
description: "Create and manage friend invite links via slash commands (/create friend invite, /view friend invites, /revoke friend invites).",11
tags: ["Friends", "Commands"],12
authors: [Devs.afn, Devs.Dziurwa],13
commands: [14
{15
name: "create friend invite",16
description: "Generates a friend invite link.",17
inputType: ApplicationCommandInputType.BUILT_IN,18
19
execute: async (args, ctx) => {20
const invite = await FriendInvites.createFriendInvite();21
22
sendBotMessage(ctx.channel.id, {23
content: `24
discord.gg/${invite.code} ·25
Expires: <t:${new Date(invite.expires_at).getTime() / 1000}:R> ·26
Max uses: \`${invite.max_uses}\`27
`.trim().replace(/\s+/g, " ")28
});29
}30
},31
{32
name: "view friend invites",33
description: "View a list of all generated friend invites.",34
inputType: ApplicationCommandInputType.BUILT_IN,35
execute: async (_, ctx) => {36
const invites = await FriendInvites.getAllFriendInvites();37
const friendInviteList = invites.map(i =>38
`39
_discord.gg/${i.code}_ ·40
Expires: <t:${new Date(i.expires_at).getTime() / 1000}:R> ·41
Times used: \`${i.uses}/${i.max_uses}\`42
`.trim().replace(/\s+/g, " ")43
);44
45
sendBotMessage(ctx.channel.id, {46
content: friendInviteList.join("\n") || "You have no active friend invites!"47
});48
},49
},50
{51
name: "revoke friend invites",52
description: "Revokes all generated friend invites.",53
inputType: ApplicationCommandInputType.BUILT_IN,54
execute: async (_, ctx) => {55
await FriendInvites.revokeFriendInvites();56
57
sendBotMessage(ctx.channel.id, {58
content: "All friend invites have been revoked."59
});60
},61
},62
]63
});64