From 951122c1a73b0cd7de371ed99861b2df49645aab Mon Sep 17 00:00:00 2001 From: CounterFire2023 <136581895+CounterFire2023@users.noreply.github.com> Date: Fri, 29 Mar 2024 16:09:59 +0800 Subject: [PATCH] add method for check discord join and role --- src/services/discord.svr.ts | 64 +++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/services/discord.svr.ts diff --git a/src/services/discord.svr.ts b/src/services/discord.svr.ts new file mode 100644 index 0000000..b79b451 --- /dev/null +++ b/src/services/discord.svr.ts @@ -0,0 +1,64 @@ +const DISCORD_API_HOST = 'https://discord.com/api/v10' +/** + * 直接通过discord接口, 获取工会中某用户信息 + * 返回的数据结构: + * https://discord.com/developers/docs/resources/guild#guild-member-object + * //TODO: 须在.env中配置以下参数: + * DISCROD_GUILD_ID + * DISCORD_BOT_TOKEN + */ +export async function getGuildMember(uid: string) { + const url = `${DISCORD_API_HOST}/guilds/${process.env.DISCROD_GUILD_ID}/members/${uid}` + const token = process.env.DISCORD_BOT_TOKEN + const response = await fetch(url, { + headers: { + authorization: `Bot ${token}`, + }, + }) + const data = await response.json() + return data +} + +/** + * 检查用户是否已经加入工会 + * @param uid + * @returns + */ +export async function checkJoinGuld(uid: string) { + try { + const res = await getGuildMember(uid) + /** + * if user not in guild, res will be: + * { + * "message": "Unknown User", + * "code": 10013 + * } + */ + if (res.code === 10013) { + return false + } + return true + } catch (e) { + return false + } +} +/** + * 检查用户是否已经获得某个角色 + * @param uid + * @param roleId + * @returns + */ +export async function checkGotRole(uid: string, roleId: string) { + try { + const res = await getGuildMember(uid) + if (res.code === 10013) { + return false + } + if (res.roles.includes(roleId)) { + return true + } + return false + } catch (e) { + return false + } +}