78 lines
2.2 KiB
TypeScript
78 lines
2.2 KiB
TypeScript
import type { NextApiRequest, NextApiResponse } from "next";
|
|
import { createRedisInstance } from "../../lib/redis";
|
|
import {
|
|
getGlobalEmotes as get7TVGlobalEmotes,
|
|
getChannelEmotes as get7TVChannelEmotes,
|
|
} from "../../lib/7TVAPI";
|
|
import {
|
|
getGlobalEmotes as getBTTVGlobalEmotes,
|
|
getUserByID as getBTTVUser,
|
|
} from "../../lib/BTTVAPI";
|
|
import {
|
|
getGlobalEmotes as getFFZGlobalEmotes,
|
|
getEmoteSet as getFFZEmoteSet,
|
|
} from "../../lib/FFZAPI";
|
|
import {
|
|
getGlobalEmotes as getTwitchGlobalEmotes,
|
|
getChannelEmotes as getTwitchChannelEmotes,
|
|
} from "../../lib/TwitchAPI";
|
|
|
|
type Data = {
|
|
[key: string]: any;
|
|
};
|
|
|
|
export default async function handler(
|
|
req: NextApiRequest,
|
|
res: NextApiResponse<Data>
|
|
) {
|
|
const redis = createRedisInstance();
|
|
|
|
if (!redis) {
|
|
res
|
|
.status(500)
|
|
.json({ error: { message: "Internal API is down", code: 50000 } });
|
|
return;
|
|
}
|
|
|
|
try {
|
|
const cachedJSON = await redis.get("ALL_EMOTES");
|
|
if (cachedJSON) {
|
|
const jsonRes = JSON.parse(cachedJSON);
|
|
redis.quit();
|
|
res.status(200).json(jsonRes);
|
|
return;
|
|
}
|
|
const ffzGlobal = await getFFZGlobalEmotes(redis);
|
|
const jsonRes = {
|
|
"7tv": {
|
|
global: (await get7TVGlobalEmotes(redis)).namedEmoteSet.emotes,
|
|
channel: (await get7TVChannelEmotes(redis, "61ad997effa9aba101bcfddf"))
|
|
.user.emote_sets[0].emotes,
|
|
},
|
|
bttv: {
|
|
global: await getBTTVGlobalEmotes(redis),
|
|
channel: (await getBTTVUser(redis, "56418014")).channelEmotes,
|
|
},
|
|
ffz: {
|
|
global: ffzGlobal.sets["3"].emoticons.concat(
|
|
ffzGlobal.sets["4330"].emoticons
|
|
),
|
|
channel: (await getFFZEmoteSet(redis, "341402")).set.emoticons,
|
|
},
|
|
twitch: {
|
|
global: (await getTwitchGlobalEmotes(redis)).data,
|
|
channel: (await getTwitchChannelEmotes(redis, "56418014")).data,
|
|
},
|
|
};
|
|
// cache emotelist for 20 minutes
|
|
await redis.set("ALL_EMOTES", JSON.stringify(jsonRes), "EX", 1200);
|
|
redis.quit();
|
|
|
|
res.status(200).json(jsonRes);
|
|
} catch (e) {
|
|
console.log(e);
|
|
res
|
|
.status(500)
|
|
.json({ error: { message: "Internal Emote API error", code: 10000 } });
|
|
}
|
|
}
|