This commit is contained in:
kdh8219 2023-05-05 15:58:30 +09:00
parent 5601e397c2
commit fcb6652891
No known key found for this signature in database
GPG key ID: 2B5B609E12BB4C19
2 changed files with 31 additions and 3 deletions

View file

@ -3,6 +3,8 @@ import { config } from "dotenv";
config();
import { getCommands } from "./command/commands.js";
import mojangAPI from "./wrapper/mojang-api.js";
await mojangAPI.load_cache_from_firestore();
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
@ -33,11 +35,10 @@ client.on(Events.InteractionCreate, async (interaction) => {
content: "There was an error while executing this command!",
ephemeral: true,
});
} catch (e) {
} catch {
await interaction.editReply({
content: "There was an error while executing this command!",
});
console.error(e);
}
}
});

View file

@ -1,9 +1,16 @@
import axios from "axios";
import TwoWayMap from "../utils/two-way-map.js";
import firebase from "./firebase.js";
type TCacheData = {
uuid: string;
id: string;
};
export class MojangAPI {
private cache: TwoWayMap<string, string> = new TwoWayMap<string, string>(); // uuid, id
private firestore = firebase.collection("uuidMap");
async getIdFromUUID(minecraft_uuid: string): Promise<string> {
let id = this.cache.get_by_first(minecraft_uuid);
@ -15,11 +22,16 @@ export class MojangAPI {
id = request.data.name;
if (!id) throw new Error("Failed to get minecraft id from api");
const get_by_id = await this.firestore.where("id", "==", id).get();
get_by_id.forEach((doc) => doc.ref.delete());
this.firestore.add({ uuid: minecraft_uuid, id: id });
this.cache.remove_by_second(id);
this.cache.set_by_first(minecraft_uuid, id);
return id;
}
async getUUIDFromId(minecraft_id): Promise<string> {
async getUUIDFromId(minecraft_id: string): Promise<string> {
let uuid = this.cache.get_by_second(minecraft_id);
if (uuid) return uuid;
@ -29,10 +41,25 @@ export class MojangAPI {
uuid = response.data.id;
if (!uuid) throw new Error("Failed to get minecraft id from api");
const get_by_uuid = await this.firestore.where("uuid", "==", uuid).get();
get_by_uuid.forEach((doc) => doc.ref.delete());
this.firestore.add({ uuid: uuid, id: minecraft_id });
this.cache.remove_by_first(uuid);
this.cache.set_by_second(uuid, minecraft_id);
return uuid;
}
async load_cache_from_firestore() {
const uuidMap = this.firestore;
(await uuidMap.get()).forEach((item) => {
const data = item.data() as TCacheData;
this.cache.set_by_first(data.uuid, data.id);
});
}
get_id_from_uuid_only_cache(minecraft_uuid: string) {
return this.cache.get_by_first(minecraft_uuid);
}
}
const mojangAPI = new MojangAPI();
export default mojangAPI;