diff --git a/src/command/commands.ts b/src/command/commands.ts index 57899fe..752a151 100644 --- a/src/command/commands.ts +++ b/src/command/commands.ts @@ -1,6 +1,7 @@ import { TCommand } from "../functions.js"; import add_nick_super from "./commands/add_nick_super.js"; +import add_nick from "./commands/add_nick.js"; -const commands: TCommand[] = [add_nick_super]; +const commands: TCommand[] = [add_nick_super, add_nick]; export default commands; diff --git a/src/command/commands/add_nick.js b/src/command/commands/add_nick.js deleted file mode 100755 index 194afd9..0000000 --- a/src/command/commands/add_nick.js +++ /dev/null @@ -1,90 +0,0 @@ -const { SlashCommandBuilder } = require("discord.js"); -const mojangAPI = new (require("mojang-api-js"))(); - -const firebase_admin = require("firebase-admin"); -const { getDatabase } = require("firebase-admin/database"); -const serviceAccount = require("../firebase/conf.json"); -if (!firebase_admin.apps.length) { - firebase_admin.initializeApp({ - credential: firebase_admin.credential.cert(serviceAccount), - databaseURL: process.env.FIREBASE_URL, - databaseAuthVariableOverride: { - uid: process.env.FIREBASE_UID, - }, - }); -} -const firebase = getDatabase().ref("/"); - -module.exports = { - data: new SlashCommandBuilder() - .setName("add_nick") - .setDescription("Add your nickname on the list and share it to 2k2rs") - .addStringOption((option) => option.setName("minecraft_id").setDescription("id of the minecraft account").setRequired(true)) - .setDMPermission(false), - async execute(interaction) { - await interaction.deferReply({ ephemeral: true }); - let minecraft; - try { - minecraft = await mojangAPI.nameToUuid(interaction.options.getString("minecraft_id")); - } catch (err) { - if (err.message == "204 status code") { - await interaction.editReply({ - content: "`에러`: 닉네임 검색을 실패했어요(닉네임을 정확하게 입력했나요?)", - ephemeral: true, - }); - return; - } - } - - let data = (await firebase.get()).val(); - - for (let discord_search_point in data["blacklist"]) { - if (data["blacklist"][discord_search_point].discord == interaction.user.id) { - await interaction.editReply({ - content: "`에러`:해당 디스코드 아이디는 블랙리스팅 되었습니다! ~~2k2r에서 꺼져주세요!~~", - ephemeral: true, - }); - return; - } - for (let minecraft_search_point in data["blacklist"][discord_search_point].minecraft) { - if (data["blacklist"][discord_search_point].minecraft[minecraft_search_point] == minecraft.id) { - await interaction.editReply({ - content: "`에러`:해당 마인크래프트 아이디는 블랙리스팅 되었습니다!", - ephemeral: true, - }); - return; - } - } - } - - for (let discord_search_point in data["members"]) { - for (let minecraft_search_point in data["members"][discord_search_point].minecraft) { - if (data["members"][discord_search_point].minecraft[minecraft_search_point] == minecraft.id) { - await interaction.editReply({ - content: "`에러`:해당 마인크래프트 아이디는 이미 등록되었습니다!", - ephemeral: true, - }); - return; - } - } //신규 마크일 경우 - if (data["members"][discord_search_point].discord == interaction.user.id) { - await interaction.editReply({ - content: `${minecraft.name}(${minecraft.id})이 성공적으로 부계정으로 등록되었습니다!`, - ephemeral: true, - }); - data["members"][discord_search_point].minecraft.push(minecraft.id); - await firebase.set(data); - return; - } - } //신규 디코일 경우 - await interaction.editReply({ - content: `${minecraft.name}(${minecraft.id})님 2k2r에 오신것을 환영합니다!`, - ephemeral: true, - }); - data["members"].push({ - discord: interaction.user.id, - minecraft: [minecraft.id], - }); - await firebase.set(data); - }, -}; diff --git a/src/command/commands/add_nick.ts b/src/command/commands/add_nick.ts new file mode 100755 index 0000000..5bea1f1 --- /dev/null +++ b/src/command/commands/add_nick.ts @@ -0,0 +1,66 @@ +import { SlashCommandBuilder, ChatInputCommandInteraction } from "discord.js"; +import mojangAPI from "../../wrapper/mojang-api.js"; +import firebase from "../../wrapper/firebase.js"; + +export default { + data: new SlashCommandBuilder() + .setName("add_nick") + .setDescription("Add your nickname on the list and share it to 2k2rs") + .addStringOption((option) => + option + .setName("minecraft_id") + .setDescription("id of the minecraft account") + .setRequired(true) + ) + .setDMPermission(false), + async execute(interaction: ChatInputCommandInteraction) { + const discord_id = interaction.user.id; + const mcid = interaction.options.getString("minecraft_id") as string; + let mcuuid: string; + try { + mcuuid = await mojangAPI.getUUIDFromId(mcid); + } catch { + await interaction.editReply({ + content: + "`에러`: 마인크래프트 닉네임 검색을 실패했습니다. 마인크래프트 닉네임을 정확하게 입력했나요?", + }); + return; + } + + const members = firebase.collection("members"); + const blacklist = firebase.collection("blacklist"); + + if (!(await blacklist.where("discord_id", "==", discord_id).get()).empty) { + interaction.editReply({ + content: "`에러`: 해당 디스코드 아이디는 블랙리스트 되었습니다.", + }); + return; + } + if (!(await blacklist.where("minecraft_uuid", "==", mcuuid).get()).empty) { + interaction.editReply({ + content: "`에러`: 해당 마인크래프트 계정은 블랙리스트 되었습니다.", + }); + return; + } + if (!(await members.where("minecraft_uuid", "==", mcuuid).get()).empty) { + interaction.editReply({ + content: "`에러`: 해당 마인크래프트 아이디는 이미 등록되었습니다.", + }); + return; + } + + if (!(await members.where("discord_id", "==", discord_id).get()).empty) { + await interaction.editReply({ + content: `${mcid}(${mcuuid})님 2k2r에 오신것을 환영합니다!`, + }); + } else { + await interaction.editReply({ + content: `${mcid}(${mcuuid})이 성공적으로 부계정으로 등록되었습니다!`, + }); + } + await members.add({ + discord_id, + minecraft_uuid: mcuuid, + }); + }, +}; diff --git a/src/command/commands/add_nick_super.ts b/src/command/commands/add_nick_super.ts index 475d4e2..c5ad187 100755 --- a/src/command/commands/add_nick_super.ts +++ b/src/command/commands/add_nick_super.ts @@ -2,17 +2,10 @@ import { SlashCommandBuilder, PermissionFlagsBits, ChatInputCommandInteraction, - User, } from "discord.js"; import mojangAPI from "../../wrapper/mojang-api.js"; import firebase from "../../wrapper/firebase.js"; -import { - check_user_type_by_discord_id, - check_user_type_by_minecraft_uuid, - EUserType, - TData, -} from "../../functions.js"; export default { data: new SlashCommandBuilder() @@ -33,17 +26,7 @@ export default { .setDefaultMemberPermissions(PermissionFlagsBits.Administrator) .setDMPermission(false), async execute(interaction: ChatInputCommandInteraction) { - let data = (await firebase.get()).val() as TData; - const discord_id = interaction.options.getUser("discord")?.id as string; - const dcusertype = check_user_type_by_discord_id(data, discord_id); - if (dcusertype == EUserType.Blacklisted) { - interaction.editReply({ - content: "`에러`: 해당 디스코드 아이디는 블랙리스트 되었습니다.", - }); - return; - } - const mcid = interaction.options.getString("minecraft_id") as string; let mcuuid: string; try { @@ -55,35 +38,41 @@ export default { }); return; } - const mcusertype = check_user_type_by_minecraft_uuid(data, mcuuid); - if (mcusertype == EUserType.Blacklisted) { + const members = firebase.collection("members"); + const blacklist = firebase.collection("blacklist"); + + if (!(await blacklist.where("discord_id", "==", discord_id).get()).empty) { interaction.editReply({ - content: "`에러`: 해당 마인크래프트 아이디는 블랙리스트 되었습니다.", + content: "`에러`: 해당 디스코드 아이디는 블랙리스트 되었습니다.", }); return; - } else if (mcusertype == EUserType.Member) { + } + if (!(await blacklist.where("minecraft_uuid", "==", mcuuid).get()).empty) { + interaction.editReply({ + content: "`에러`: 해당 마인크래프트 계정은 블랙리스트 되었습니다.", + }); + return; + } + if (!(await members.where("minecraft_uuid", "==", mcuuid).get()).empty) { interaction.editReply({ content: "`에러`: 해당 마인크래프트 아이디는 이미 등록되었습니다.", }); return; } - if (dcusertype == EUserType.Unregistered) { + if (!(await members.where("discord_id", "==", discord_id).get()).empty) { await interaction.editReply({ content: `${mcid}(${mcuuid})님 2k2r에 오신것을 환영합니다!`, }); - data["members"].push({ discord: discord_id, minecraft: [mcuuid] }); } else { - for (let member of data.members) { - if (member.discord == discord_id) { - await interaction.editReply({ - content: `${mcid}(${mcuuid})이 성공적으로 부계정으로 등록되었습니다!`, - }); - member.minecraft.push(mcuuid); - } - } //신규 디코일 경우 + await interaction.editReply({ + content: `${mcid}(${mcuuid})이 성공적으로 부계정으로 등록되었습니다!`, + }); } - await firebase.set(data); + await members.add({ + discord_id, + minecraft_uuid: mcuuid, + }); }, }; diff --git a/src/functions.ts b/src/functions.ts index f78512a..7cd2b51 100644 --- a/src/functions.ts +++ b/src/functions.ts @@ -6,66 +6,6 @@ export type TCommand = { data: SlashCommandBuilder; execute: Function; }; -export type TUser = { - discord: string; // id - minecraft: string[]; //uuid -}; -export type TData = { - blacklist: TUser[]; - members: TUser[]; -}; -export enum EUserType { - Unregistered, - Blacklisted, - Member, -} -export function check_user_type_by_discord_id( - data: TData, - discord_id: string -): EUserType { - for (let discord_search_point in data["blacklist"]) { - if (data.blacklist[discord_search_point].discord === discord_id) { - return EUserType.Blacklisted; - } - } - for (let discord_search_point in data["members"]) { - if (data.blacklist[discord_search_point].discord === discord_id) { - return EUserType.Member; - } - } - return EUserType.Unregistered; -} - -export function check_user_type_by_minecraft_uuid( - data: TData, - minecraft_uuid: string -): EUserType { - for (let discord_search_point in data.blacklist) { - for (let minecraft_search_point in data.blacklist[discord_search_point] - .minecraft) { - if ( - data.blacklist[discord_search_point].minecraft[ - minecraft_search_point - ] === minecraft_uuid - ) { - return EUserType.Blacklisted; - } - } - } - for (let discord_search_point in data.members) { - for (let minecraft_search_point in data.members[discord_search_point] - .minecraft) { - if ( - data.members[discord_search_point].minecraft[minecraft_search_point] === - minecraft_uuid - ) { - return EUserType.Member; - } - } - } - return EUserType.Unregistered; -} - export function getCommands(): Collection { const commandColection = new Collection(); for (const command of commands) { @@ -73,3 +13,64 @@ export function getCommands(): Collection { } return commandColection; } + +export type TUser = { + discord: string; // id + minecraft: string[]; //uuid +}; + +// export type TData = { +// blacklist: TUser[]; +// members: TUser[]; +// }; +// export enum EUserType { +// Unregistered, +// Blacklisted, +// Member, +// } +// export function check_user_type_by_discord_id( +// data: TData, +// discord_id: string +// ): EUserType { +// for (let discord_search_point in data["blacklist"]) { +// if (data.blacklist[discord_search_point].discord === discord_id) { +// return EUserType.Blacklisted; +// } +// } +// for (let discord_search_point in data["members"]) { +// if (data.blacklist[discord_search_point].discord === discord_id) { +// return EUserType.Member; +// } +// } +// return EUserType.Unregistered; +// } + +// export function check_user_type_by_minecraft_uuid( +// data: TData, +// minecraft_uuid: string +// ): EUserType { +// for (let discord_search_point in data.blacklist) { +// for (let minecraft_search_point in data.blacklist[discord_search_point] +// .minecraft) { +// if ( +// data.blacklist[discord_search_point].minecraft[ +// minecraft_search_point +// ] === minecraft_uuid +// ) { +// return EUserType.Blacklisted; +// } +// } +// } +// for (let discord_search_point in data.members) { +// for (let minecraft_search_point in data.members[discord_search_point] +// .minecraft) { +// if ( +// data.members[discord_search_point].minecraft[minecraft_search_point] === +// minecraft_uuid +// ) { +// return EUserType.Member; +// } +// } +// } +// return EUserType.Unregistered; +// } diff --git a/src/wrapper/firebase.ts b/src/wrapper/firebase.ts index 1e4aeea..9d1b43e 100644 --- a/src/wrapper/firebase.ts +++ b/src/wrapper/firebase.ts @@ -1,19 +1,12 @@ -import firebase_admin from "firebase-admin"; -import { getDatabase } from "firebase-admin/database"; +import { initializeApp, cert } from "firebase-admin/app"; +import { getFirestore } from "firebase-admin/firestore"; import { config } from "dotenv"; config(); -if (!firebase_admin.apps.length) { - firebase_admin.initializeApp({ - credential: firebase_admin.credential.cert( - JSON.parse(process.env["firebase_cert"] as string) - ), - databaseURL: "https://two-k-two-r-name-bot-default-rtdb.firebaseio.com", - databaseAuthVariableOverride: { - uid: process.env.FIREBASE_UID, - }, - }); -} -const firebase = getDatabase().ref("/"); +initializeApp({ + credential: cert(JSON.parse(process.env["firebase_cert"] as string)), +}); -export default firebase; +const db = getFirestore(); + +export default db;