mirror of
https://github.com/spacebarchat/server.git
synced 2024-11-10 12:42:44 +01:00
Merge branch 'master' of https://github.com/fosscord/fosscord-api
This commit is contained in:
commit
2e9f36b66a
@ -5,7 +5,6 @@ export * from "./schema/Channel";
|
|||||||
export * from "./schema/Guild";
|
export * from "./schema/Guild";
|
||||||
export * from "./schema/Invite";
|
export * from "./schema/Invite";
|
||||||
export * from "./schema/Message";
|
export * from "./schema/Message";
|
||||||
export * from "./util/Constants";
|
|
||||||
export * from "./util/instanceOf";
|
export * from "./util/instanceOf";
|
||||||
export * from "./util/instanceOf";
|
export * from "./util/instanceOf";
|
||||||
export * from "./util/RandomInviteID";
|
export * from "./util/RandomInviteID";
|
||||||
|
@ -2,9 +2,8 @@ import { NextFunction, Request, Response } from "express";
|
|||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { EntityNotFoundError } from "typeorm";
|
import { EntityNotFoundError } from "typeorm";
|
||||||
import { FieldError } from "../util/instanceOf";
|
import { FieldError } from "../util/instanceOf";
|
||||||
import { ApiError } from "../util/ApiError";
|
import { ApiError } from "@fosscord/util";
|
||||||
|
|
||||||
// TODO: update with new body/typorm validation
|
|
||||||
export function ErrorHandler(error: Error, req: Request, res: Response, next: NextFunction) {
|
export function ErrorHandler(error: Error, req: Request, res: Response, next: NextFunction) {
|
||||||
if (!error) return next();
|
if (!error) return next();
|
||||||
|
|
||||||
@ -20,7 +19,7 @@ export function ErrorHandler(error: Error, req: Request, res: Response, next: Ne
|
|||||||
message = error.message;
|
message = error.message;
|
||||||
httpcode = error.httpStatus;
|
httpcode = error.httpStatus;
|
||||||
} else if (error instanceof EntityNotFoundError) {
|
} else if (error instanceof EntityNotFoundError) {
|
||||||
message = `${(error as any).stringifyTarget} could not be found`;
|
message = `${(error as any).stringifyTarget || "Item"} could not be found`;
|
||||||
code = 404;
|
code = 404;
|
||||||
} else if (error instanceof FieldError) {
|
} else if (error instanceof FieldError) {
|
||||||
code = Number(error.code);
|
code = Number(error.code);
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Channel, ChannelPinsUpdateEvent, Config, emitEvent, getPermission, Message, MessageUpdateEvent } from "@fosscord/util";
|
import { Channel, ChannelPinsUpdateEvent, Config, emitEvent, getPermission, Message, MessageUpdateEvent } from "@fosscord/util";
|
||||||
import { Router, Request, Response } from "express";
|
import { Router, Request, Response } from "express";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { DiscordApiErrors } from "../../../util/Constants";
|
import { DiscordApiErrors } from "@fosscord/util";
|
||||||
|
|
||||||
const router: Router = Router();
|
const router: Router = Router();
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ import { check, Length } from "../../../util/instanceOf";
|
|||||||
import { Channel, Config, getPermission, trimSpecial, Webhook } from "@fosscord/util";
|
import { Channel, Config, getPermission, trimSpecial, Webhook } from "@fosscord/util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { isTextChannel } from "./messages/index";
|
import { isTextChannel } from "./messages/index";
|
||||||
import { DiscordApiErrors } from "../../../util/Constants";
|
import { DiscordApiErrors } from "@fosscord/util";
|
||||||
|
|
||||||
const router: Router = Router();
|
const router: Router = Router();
|
||||||
// TODO: webhooks
|
// TODO: webhooks
|
||||||
|
17
api/src/routes/discoverable-guilds.ts
Normal file
17
api/src/routes/discoverable-guilds.ts
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import { Guild } from "@fosscord/util";
|
||||||
|
import { Router, Request, Response } from "express";
|
||||||
|
import { In } from "typeorm";
|
||||||
|
|
||||||
|
const router = Router();
|
||||||
|
|
||||||
|
router.get("/", async (req: Request, res: Response) => {
|
||||||
|
const { limit } = req.params;
|
||||||
|
|
||||||
|
// ! this only works using SQL querys
|
||||||
|
// TODO: implement this with default typeorm query
|
||||||
|
// const guilds = await Guild.find({ where: { features: "DISCOVERABLE" } }); //, take: Math.abs(Number(limit)) });
|
||||||
|
const guilds = await Guild.find({ where: `"features" LIKE 'COMMUNITY'`, take: Math.abs(Number(limit)) });
|
||||||
|
res.send({ guilds: guilds });
|
||||||
|
});
|
||||||
|
|
||||||
|
export default router;
|
@ -50,7 +50,8 @@ router.patch("/", check(MemberChangeSchema), async (req: Request, res: Response)
|
|||||||
});
|
});
|
||||||
|
|
||||||
router.put("/", async (req: Request, res: Response) => {
|
router.put("/", async (req: Request, res: Response) => {
|
||||||
const { guild_id, member_id } = req.params;
|
let { guild_id, member_id } = req.params;
|
||||||
|
if (member_id === "@me") member_id = req.user_id;
|
||||||
|
|
||||||
throw new HTTPError("Maintenance: Currently you can't add a member", 403);
|
throw new HTTPError("Maintenance: Currently you can't add a member", 403);
|
||||||
// TODO: only for oauth2 applications
|
// TODO: only for oauth2 applications
|
||||||
|
@ -14,7 +14,7 @@ import { HTTPError } from "lambert-server";
|
|||||||
|
|
||||||
import { check } from "../../../util/instanceOf";
|
import { check } from "../../../util/instanceOf";
|
||||||
import { RoleModifySchema, RolePositionUpdateSchema } from "../../../schema/Roles";
|
import { RoleModifySchema, RolePositionUpdateSchema } from "../../../schema/Roles";
|
||||||
import { DiscordApiErrors } from "../../../util/Constants";
|
import { DiscordApiErrors } from "@fosscord/util";
|
||||||
import { In } from "typeorm";
|
import { In } from "typeorm";
|
||||||
|
|
||||||
const router: Router = Router();
|
const router: Router = Router();
|
||||||
|
@ -3,7 +3,7 @@ import { Role, Guild, Snowflake, Config, User, Member, Channel } from "@fosscord
|
|||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { check } from "./../../util/instanceOf";
|
import { check } from "./../../util/instanceOf";
|
||||||
import { GuildCreateSchema } from "../../schema/Guild";
|
import { GuildCreateSchema } from "../../schema/Guild";
|
||||||
import { DiscordApiErrors } from "../../util/Constants";
|
import { DiscordApiErrors } from "@fosscord/util";
|
||||||
|
|
||||||
const router: Router = Router();
|
const router: Router = Router();
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ import { Template, Guild, Role, Snowflake, Config, User, Member } from "@fosscor
|
|||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { GuildTemplateCreateSchema } from "../../../schema/Guild";
|
import { GuildTemplateCreateSchema } from "../../../schema/Guild";
|
||||||
import { check } from "../../../util/instanceOf";
|
import { check } from "../../../util/instanceOf";
|
||||||
import { DiscordApiErrors } from "../../../util/Constants";
|
import { DiscordApiErrors } from "@fosscord/util";
|
||||||
|
|
||||||
router.get("/:code", async (req: Request, res: Response) => {
|
router.get("/:code", async (req: Request, res: Response) => {
|
||||||
const { code } = req.params;
|
const { code } = req.params;
|
||||||
|
10
api/src/routes/template.ts.disabled
Normal file
10
api/src/routes/template.ts.disabled
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
//TODO: this is a template for a generic route
|
||||||
|
|
||||||
|
import { Router, Request, Response } from "express";
|
||||||
|
const router = Router();
|
||||||
|
|
||||||
|
router.get("/", async (req: Request, res: Response) => {
|
||||||
|
res.send({});
|
||||||
|
});
|
||||||
|
|
||||||
|
export default router;
|
@ -10,7 +10,7 @@ import {
|
|||||||
} from "@fosscord/util";
|
} from "@fosscord/util";
|
||||||
import { Router, Response, Request } from "express";
|
import { Router, Response, Request } from "express";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { DiscordApiErrors } from "../../../util/Constants";
|
import { DiscordApiErrors } from "@fosscord/util";
|
||||||
|
|
||||||
import { check, Length } from "../../../util/instanceOf";
|
import { check, Length } from "../../../util/instanceOf";
|
||||||
|
|
||||||
|
@ -16,6 +16,42 @@ import { Webhook } from "./Webhook";
|
|||||||
// TODO: guild_scheduled_events
|
// TODO: guild_scheduled_events
|
||||||
// TODO: stage_instances
|
// TODO: stage_instances
|
||||||
// TODO: threads
|
// TODO: threads
|
||||||
|
// TODO: description
|
||||||
|
// TODO: categories:
|
||||||
|
// [{
|
||||||
|
// "id": 16,
|
||||||
|
// "name": {
|
||||||
|
// "default": "Anime & Manga",
|
||||||
|
// "localizations": {
|
||||||
|
// "de": "Anime & Manga",
|
||||||
|
// "fr": "Anim\u00e9s et mangas",
|
||||||
|
// "ru": "\u0410\u043d\u0438\u043c\u0435 \u0438 \u043c\u0430\u043d\u0433\u0430"
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// "is_primary": false
|
||||||
|
// }]
|
||||||
|
// TODO:
|
||||||
|
// primary_category :{
|
||||||
|
// id: 1,
|
||||||
|
// name: {
|
||||||
|
// default: "Gaming",
|
||||||
|
// localizations: { de: "Gaming", fr: "Gaming", ru: "\u0418\u0433\u0440\u044b" },
|
||||||
|
// is_primary: true,
|
||||||
|
// },
|
||||||
|
// };
|
||||||
|
// TODO:
|
||||||
|
// "keywords": [
|
||||||
|
// "Genshin Impact",
|
||||||
|
// "Paimon",
|
||||||
|
// "Honkai Impact",
|
||||||
|
// "ARPG",
|
||||||
|
// "Open-World",
|
||||||
|
// "Waifu",
|
||||||
|
// "Anime",
|
||||||
|
// "Genshin",
|
||||||
|
// "miHoYo",
|
||||||
|
// "Gacha"
|
||||||
|
// ],
|
||||||
|
|
||||||
export const PublicGuildRelations = [
|
export const PublicGuildRelations = [
|
||||||
"channels",
|
"channels",
|
||||||
@ -66,6 +102,7 @@ export class Guild extends BaseClass {
|
|||||||
|
|
||||||
@Column({ type: "simple-array" })
|
@Column({ type: "simple-array" })
|
||||||
features: string[]; //TODO use enum
|
features: string[]; //TODO use enum
|
||||||
|
//TODO: https://discord.com/developers/docs/resources/guild#guild-object-guild-features
|
||||||
|
|
||||||
@Column({ nullable: true })
|
@Column({ nullable: true })
|
||||||
icon?: string;
|
icon?: string;
|
||||||
|
@ -25,7 +25,8 @@ import {
|
|||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { Role } from "./Role";
|
import { Role } from "./Role";
|
||||||
import { BaseClassWithoutId } from "./BaseClass";
|
import { BaseClassWithoutId } from "./BaseClass";
|
||||||
import { PublicGuildRelations } from ".";
|
import { Ban, PublicGuildRelations } from ".";
|
||||||
|
import { DiscordApiErrors } from "../util/Constants";
|
||||||
|
|
||||||
@Entity("members")
|
@Entity("members")
|
||||||
@Index(["id", "guild_id"], { unique: true })
|
@Index(["id", "guild_id"], { unique: true })
|
||||||
@ -198,7 +199,10 @@ export class Member extends BaseClassWithoutId {
|
|||||||
|
|
||||||
static async addToGuild(user_id: string, guild_id: string) {
|
static async addToGuild(user_id: string, guild_id: string) {
|
||||||
const user = await User.getPublicUser(user_id);
|
const user = await User.getPublicUser(user_id);
|
||||||
|
const isBanned = await Ban.count({ where: { guild_id, user_id } });
|
||||||
|
if (isBanned) {
|
||||||
|
throw DiscordApiErrors.USER_BANNED;
|
||||||
|
}
|
||||||
const { maxGuilds } = Config.get().limits.user;
|
const { maxGuilds } = Config.get().limits.user;
|
||||||
const guild_count = await Member.count({ id: user_id });
|
const guild_count = await Member.count({ id: user_id });
|
||||||
if (guild_count >= maxGuilds) {
|
if (guild_count >= maxGuilds) {
|
||||||
|
@ -6,7 +6,7 @@ export const WSCodes = {
|
|||||||
4010: "SHARDING_INVALID",
|
4010: "SHARDING_INVALID",
|
||||||
4011: "SHARDING_REQUIRED",
|
4011: "SHARDING_REQUIRED",
|
||||||
4013: "INVALID_INTENTS",
|
4013: "INVALID_INTENTS",
|
||||||
4014: "DISALLOWED_INTENTS"
|
4014: "DISALLOWED_INTENTS",
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -22,7 +22,7 @@ export const WSCodes = {
|
|||||||
* * RESUMING: 8
|
* * RESUMING: 8
|
||||||
* @typedef {number} Status
|
* @typedef {number} Status
|
||||||
*/
|
*/
|
||||||
export const Status = {
|
export const WsStatus = {
|
||||||
READY: 0,
|
READY: 0,
|
||||||
CONNECTING: 1,
|
CONNECTING: 1,
|
||||||
RECONNECTING: 2,
|
RECONNECTING: 2,
|
||||||
@ -31,7 +31,7 @@ export const Status = {
|
|||||||
DISCONNECTED: 5,
|
DISCONNECTED: 5,
|
||||||
WAITING_FOR_GUILDS: 6,
|
WAITING_FOR_GUILDS: 6,
|
||||||
IDENTIFYING: 7,
|
IDENTIFYING: 7,
|
||||||
RESUMING: 8
|
RESUMING: 8,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -48,7 +48,7 @@ export const VoiceStatus = {
|
|||||||
CONNECTING: 1,
|
CONNECTING: 1,
|
||||||
AUTHENTICATING: 2,
|
AUTHENTICATING: 2,
|
||||||
RECONNECTING: 3,
|
RECONNECTING: 3,
|
||||||
DISCONNECTED: 4
|
DISCONNECTED: 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
export const OPCodes = {
|
export const OPCodes = {
|
||||||
@ -63,7 +63,7 @@ export const OPCodes = {
|
|||||||
REQUEST_GUILD_MEMBERS: 8,
|
REQUEST_GUILD_MEMBERS: 8,
|
||||||
INVALID_SESSION: 9,
|
INVALID_SESSION: 9,
|
||||||
HELLO: 10,
|
HELLO: 10,
|
||||||
HEARTBEAT_ACK: 11
|
HEARTBEAT_ACK: 11,
|
||||||
};
|
};
|
||||||
|
|
||||||
export const VoiceOPCodes = {
|
export const VoiceOPCodes = {
|
||||||
@ -75,7 +75,7 @@ export const VoiceOPCodes = {
|
|||||||
SPEAKING: 5,
|
SPEAKING: 5,
|
||||||
HELLO: 8,
|
HELLO: 8,
|
||||||
CLIENT_CONNECT: 12,
|
CLIENT_CONNECT: 12,
|
||||||
CLIENT_DISCONNECT: 13
|
CLIENT_DISCONNECT: 13,
|
||||||
};
|
};
|
||||||
|
|
||||||
export const Events = {
|
export const Events = {
|
||||||
@ -133,7 +133,7 @@ export const Events = {
|
|||||||
SHARD_READY: "shardReady",
|
SHARD_READY: "shardReady",
|
||||||
SHARD_RESUME: "shardResume",
|
SHARD_RESUME: "shardResume",
|
||||||
INVALIDATED: "invalidated",
|
INVALIDATED: "invalidated",
|
||||||
RAW: "raw"
|
RAW: "raw",
|
||||||
};
|
};
|
||||||
|
|
||||||
export const ShardEvents = {
|
export const ShardEvents = {
|
||||||
@ -142,7 +142,7 @@ export const ShardEvents = {
|
|||||||
INVALID_SESSION: "invalidSession",
|
INVALID_SESSION: "invalidSession",
|
||||||
READY: "ready",
|
READY: "ready",
|
||||||
RESUMED: "resumed",
|
RESUMED: "resumed",
|
||||||
ALL_READY: "allReady"
|
ALL_READY: "allReady",
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -234,7 +234,7 @@ export const WSEvents = keyMirror([
|
|||||||
"TYPING_START",
|
"TYPING_START",
|
||||||
"VOICE_STATE_UPDATE",
|
"VOICE_STATE_UPDATE",
|
||||||
"VOICE_SERVER_UPDATE",
|
"VOICE_SERVER_UPDATE",
|
||||||
"WEBHOOKS_UPDATE"
|
"WEBHOOKS_UPDATE",
|
||||||
]);
|
]);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -277,7 +277,7 @@ export const MessageTypes = [
|
|||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
"REPLY"
|
"REPLY",
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -286,7 +286,9 @@ export const MessageTypes = [
|
|||||||
* * REPLY
|
* * REPLY
|
||||||
* @typedef {string} SystemMessageType
|
* @typedef {string} SystemMessageType
|
||||||
*/
|
*/
|
||||||
export const SystemMessageTypes = MessageTypes.filter((type: string | null) => type && type !== "DEFAULT" && type !== "REPLY");
|
export const SystemMessageTypes = MessageTypes.filter(
|
||||||
|
(type: string | null) => type && type !== "DEFAULT" && type !== "REPLY"
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <info>Bots cannot set a `CUSTOM_STATUS`, it is only for custom statuses received from users</info>
|
* <info>Bots cannot set a `CUSTOM_STATUS`, it is only for custom statuses received from users</info>
|
||||||
@ -308,12 +310,12 @@ export const ChannelTypes = {
|
|||||||
GROUP: 3,
|
GROUP: 3,
|
||||||
CATEGORY: 4,
|
CATEGORY: 4,
|
||||||
NEWS: 5,
|
NEWS: 5,
|
||||||
STORE: 6
|
STORE: 6,
|
||||||
};
|
};
|
||||||
|
|
||||||
export const ClientApplicationAssetTypes = {
|
export const ClientApplicationAssetTypes = {
|
||||||
SMALL: 1,
|
SMALL: 1,
|
||||||
BIG: 2
|
BIG: 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
export const Colors = {
|
export const Colors = {
|
||||||
@ -345,7 +347,7 @@ export const Colors = {
|
|||||||
BLURPLE: 0x7289da,
|
BLURPLE: 0x7289da,
|
||||||
GREYPLE: 0x99aab5,
|
GREYPLE: 0x99aab5,
|
||||||
DARK_BUT_NOT_BLACK: 0x2c2f33,
|
DARK_BUT_NOT_BLACK: 0x2c2f33,
|
||||||
NOT_QUITE_BLACK: 0x23272a
|
NOT_QUITE_BLACK: 0x23272a,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -554,8 +556,14 @@ export const DiscordApiErrors = {
|
|||||||
UNKNOWN_GUILD_SCHEDULED_EVENT_USER: new ApiError("Unknown Guild Scheduled Event User", 10071),
|
UNKNOWN_GUILD_SCHEDULED_EVENT_USER: new ApiError("Unknown Guild Scheduled Event User", 10071),
|
||||||
BOT_PROHIBITED_ENDPOINT: new ApiError("Bots cannot use this endpoint", 20001),
|
BOT_PROHIBITED_ENDPOINT: new ApiError("Bots cannot use this endpoint", 20001),
|
||||||
BOT_ONLY_ENDPOINT: new ApiError("Only bots can use this endpoint", 20002),
|
BOT_ONLY_ENDPOINT: new ApiError("Only bots can use this endpoint", 20002),
|
||||||
EXPLICIT_CONTENT_CANNOT_BE_SENT_TO_RECIPIENT: new ApiError("Explicit content cannot be sent to the desired recipient(s)", 20009),
|
EXPLICIT_CONTENT_CANNOT_BE_SENT_TO_RECIPIENT: new ApiError(
|
||||||
ACTION_NOT_AUTHORIZED_ON_APPLICATION: new ApiError("You are not authorized to perform this action on this application", 20012),
|
"Explicit content cannot be sent to the desired recipient(s)",
|
||||||
|
20009
|
||||||
|
),
|
||||||
|
ACTION_NOT_AUTHORIZED_ON_APPLICATION: new ApiError(
|
||||||
|
"You are not authorized to perform this action on this application",
|
||||||
|
20012
|
||||||
|
),
|
||||||
SLOWMODE_RATE_LIMIT: new ApiError("This action cannot be performed due to slowmode rate limit", 20016),
|
SLOWMODE_RATE_LIMIT: new ApiError("This action cannot be performed due to slowmode rate limit", 20016),
|
||||||
ONLY_OWNER: new ApiError("Only the owner of this account can perform this action", 20018),
|
ONLY_OWNER: new ApiError("Only the owner of this account can perform this action", 20018),
|
||||||
ANNOUNCEMENT_RATE_LIMITS: new ApiError("This message cannot be edited due to announcement rate limits", 20022),
|
ANNOUNCEMENT_RATE_LIMITS: new ApiError("This message cannot be edited due to announcement rate limits", 20022),
|
||||||
@ -568,25 +576,40 @@ export const DiscordApiErrors = {
|
|||||||
MAXIMUM_GUILDS: new ApiError("Maximum number of guilds reached ({})", 30001, undefined, ["100"]),
|
MAXIMUM_GUILDS: new ApiError("Maximum number of guilds reached ({})", 30001, undefined, ["100"]),
|
||||||
MAXIMUM_FRIENDS: new ApiError("Maximum number of friends reached ({})", 30002, undefined, ["1000"]),
|
MAXIMUM_FRIENDS: new ApiError("Maximum number of friends reached ({})", 30002, undefined, ["1000"]),
|
||||||
MAXIMUM_PINS: new ApiError("Maximum number of pins reached for the channel ({})", 30003, undefined, ["50"]),
|
MAXIMUM_PINS: new ApiError("Maximum number of pins reached for the channel ({})", 30003, undefined, ["50"]),
|
||||||
MAXIMUM_NUMBER_OF_RECIPIENTS_REACHED: new ApiError("Maximum number of recipients reached ({})", 30004, undefined, ["10"]),
|
MAXIMUM_NUMBER_OF_RECIPIENTS_REACHED: new ApiError("Maximum number of recipients reached ({})", 30004, undefined, [
|
||||||
|
"10",
|
||||||
|
]),
|
||||||
MAXIMUM_ROLES: new ApiError("Maximum number of guild roles reached ({})", 30005, undefined, ["250"]),
|
MAXIMUM_ROLES: new ApiError("Maximum number of guild roles reached ({})", 30005, undefined, ["250"]),
|
||||||
MAXIMUM_WEBHOOKS: new ApiError("Maximum number of webhooks reached ({})", 30007, undefined, ["10"]),
|
MAXIMUM_WEBHOOKS: new ApiError("Maximum number of webhooks reached ({})", 30007, undefined, ["10"]),
|
||||||
MAXIMUM_NUMBER_OF_EMOJIS_REACHED: new ApiError("Maximum number of emojis reached", 30008),
|
MAXIMUM_NUMBER_OF_EMOJIS_REACHED: new ApiError("Maximum number of emojis reached", 30008),
|
||||||
MAXIMUM_REACTIONS: new ApiError("Maximum number of reactions reached ({})", 30010, undefined, ["20"]),
|
MAXIMUM_REACTIONS: new ApiError("Maximum number of reactions reached ({})", 30010, undefined, ["20"]),
|
||||||
MAXIMUM_CHANNELS: new ApiError("Maximum number of guild channels reached ({})", 30013, undefined, ["500"]),
|
MAXIMUM_CHANNELS: new ApiError("Maximum number of guild channels reached ({})", 30013, undefined, ["500"]),
|
||||||
MAXIMUM_ATTACHMENTS: new ApiError("Maximum number of attachments in a message reached ({})", 30015, undefined, ["10"]),
|
MAXIMUM_ATTACHMENTS: new ApiError("Maximum number of attachments in a message reached ({})", 30015, undefined, [
|
||||||
|
"10",
|
||||||
|
]),
|
||||||
MAXIMUM_INVITES: new ApiError("Maximum number of invites reached ({})", 30016, undefined, ["1000"]),
|
MAXIMUM_INVITES: new ApiError("Maximum number of invites reached ({})", 30016, undefined, ["1000"]),
|
||||||
MAXIMUM_ANIMATED_EMOJIS: new ApiError("Maximum number of animated emojis reached", 30018),
|
MAXIMUM_ANIMATED_EMOJIS: new ApiError("Maximum number of animated emojis reached", 30018),
|
||||||
MAXIMUM_SERVER_MEMBERS: new ApiError("Maximum number of server members reached", 30019),
|
MAXIMUM_SERVER_MEMBERS: new ApiError("Maximum number of server members reached", 30019),
|
||||||
MAXIMUM_SERVER_CATEGORIES: new ApiError("Maximum number of server categories has been reached ({})", 30030, undefined, ["5"]),
|
MAXIMUM_SERVER_CATEGORIES: new ApiError(
|
||||||
|
"Maximum number of server categories has been reached ({})",
|
||||||
|
30030,
|
||||||
|
undefined,
|
||||||
|
["5"]
|
||||||
|
),
|
||||||
GUILD_ALREADY_HAS_TEMPLATE: new ApiError("Guild already has a template", 30031),
|
GUILD_ALREADY_HAS_TEMPLATE: new ApiError("Guild already has a template", 30031),
|
||||||
MAXIMUM_THREAD_PARTICIPANTS: new ApiError("Max number of thread participants has been reached", 30033),
|
MAXIMUM_THREAD_PARTICIPANTS: new ApiError("Max number of thread participants has been reached", 30033),
|
||||||
MAXIMUM_BANS_FOR_NON_GUILD_MEMBERS: new ApiError("Maximum number of bans for non-guild members have been exceeded", 30035),
|
MAXIMUM_BANS_FOR_NON_GUILD_MEMBERS: new ApiError(
|
||||||
|
"Maximum number of bans for non-guild members have been exceeded",
|
||||||
|
30035
|
||||||
|
),
|
||||||
MAXIMUM_BANS_FETCHES: new ApiError("Maximum number of bans fetches has been reached", 30037),
|
MAXIMUM_BANS_FETCHES: new ApiError("Maximum number of bans fetches has been reached", 30037),
|
||||||
MAXIMUM_STICKERS: new ApiError("Maximum number of stickers reached", 30039),
|
MAXIMUM_STICKERS: new ApiError("Maximum number of stickers reached", 30039),
|
||||||
MAXIMUM_PRUNE_REQUESTS: new ApiError("Maximum number of prune requests has been reached. Try again later", 30040),
|
MAXIMUM_PRUNE_REQUESTS: new ApiError("Maximum number of prune requests has been reached. Try again later", 30040),
|
||||||
UNAUTHORIZED: new ApiError("Unauthorized. Provide a valid token and try again", 40001),
|
UNAUTHORIZED: new ApiError("Unauthorized. Provide a valid token and try again", 40001),
|
||||||
ACCOUNT_VERIFICATION_REQUIRED: new ApiError("You need to verify your account in order to perform this action", 40002),
|
ACCOUNT_VERIFICATION_REQUIRED: new ApiError(
|
||||||
|
"You need to verify your account in order to perform this action",
|
||||||
|
40002
|
||||||
|
),
|
||||||
OPENING_DIRECT_MESSAGES_TOO_FAST: new ApiError("You are opening direct messages too fast", 40003),
|
OPENING_DIRECT_MESSAGES_TOO_FAST: new ApiError("You are opening direct messages too fast", 40003),
|
||||||
REQUEST_ENTITY_TOO_LARGE: new ApiError("Request entity too large. Try sending something smaller in size", 40005),
|
REQUEST_ENTITY_TOO_LARGE: new ApiError("Request entity too large. Try sending something smaller in size", 40005),
|
||||||
FEATURE_TEMPORARILY_DISABLED: new ApiError("This feature has been temporarily disabled server-side", 40006),
|
FEATURE_TEMPORARILY_DISABLED: new ApiError("This feature has been temporarily disabled server-side", 40006),
|
||||||
@ -602,7 +625,10 @@ export const DiscordApiErrors = {
|
|||||||
CANNOT_SEND_EMPTY_MESSAGE: new ApiError("Cannot send an empty message", 50006),
|
CANNOT_SEND_EMPTY_MESSAGE: new ApiError("Cannot send an empty message", 50006),
|
||||||
CANNOT_MESSAGE_USER: new ApiError("Cannot send messages to this user", 50007),
|
CANNOT_MESSAGE_USER: new ApiError("Cannot send messages to this user", 50007),
|
||||||
CANNOT_SEND_MESSAGES_IN_VOICE_CHANNEL: new ApiError("Cannot send messages in a voice channel", 50008),
|
CANNOT_SEND_MESSAGES_IN_VOICE_CHANNEL: new ApiError("Cannot send messages in a voice channel", 50008),
|
||||||
CHANNEL_VERIFICATION_LEVEL_TOO_HIGH: new ApiError("Channel verification level is too high for you to gain access", 50009),
|
CHANNEL_VERIFICATION_LEVEL_TOO_HIGH: new ApiError(
|
||||||
|
"Channel verification level is too high for you to gain access",
|
||||||
|
50009
|
||||||
|
),
|
||||||
OAUTH2_APPLICATION_BOT_ABSENT: new ApiError("OAuth2 application does not have a bot", 50010),
|
OAUTH2_APPLICATION_BOT_ABSENT: new ApiError("OAuth2 application does not have a bot", 50010),
|
||||||
MAXIMUM_OAUTH2_APPLICATIONS: new ApiError("OAuth2 application limit reached", 50011),
|
MAXIMUM_OAUTH2_APPLICATIONS: new ApiError("OAuth2 application limit reached", 50011),
|
||||||
INVALID_OAUTH_STATE: new ApiError("Invalid OAuth2 state", 50012),
|
INVALID_OAUTH_STATE: new ApiError("Invalid OAuth2 state", 50012),
|
||||||
@ -615,7 +641,10 @@ export const DiscordApiErrors = {
|
|||||||
undefined,
|
undefined,
|
||||||
["2", "100"]
|
["2", "100"]
|
||||||
),
|
),
|
||||||
CANNOT_PIN_MESSAGE_IN_OTHER_CHANNEL: new ApiError("A message can only be pinned to the channel it was sent in", 50019),
|
CANNOT_PIN_MESSAGE_IN_OTHER_CHANNEL: new ApiError(
|
||||||
|
"A message can only be pinned to the channel it was sent in",
|
||||||
|
50019
|
||||||
|
),
|
||||||
INVALID_OR_TAKEN_INVITE_CODE: new ApiError("Invite code was either invalid or taken", 50020),
|
INVALID_OR_TAKEN_INVITE_CODE: new ApiError("Invite code was either invalid or taken", 50020),
|
||||||
CANNOT_EXECUTE_ON_SYSTEM_MESSAGE: new ApiError("Cannot execute action on a system message", 50021),
|
CANNOT_EXECUTE_ON_SYSTEM_MESSAGE: new ApiError("Cannot execute action on a system message", 50021),
|
||||||
CANNOT_EXECUTE_ON_THIS_CHANNEL_TYPE: new ApiError("Cannot execute action on this channel type", 50024),
|
CANNOT_EXECUTE_ON_THIS_CHANNEL_TYPE: new ApiError("Cannot execute action on this channel type", 50024),
|
||||||
@ -629,22 +658,34 @@ export const DiscordApiErrors = {
|
|||||||
"Invalid form body (returned for both application/json and multipart/form-data bodies), or invalid Content-Type provided",
|
"Invalid form body (returned for both application/json and multipart/form-data bodies), or invalid Content-Type provided",
|
||||||
50035
|
50035
|
||||||
),
|
),
|
||||||
INVITE_ACCEPTED_TO_GUILD_NOT_CONTAINING_BOT: new ApiError("An invite was accepted to a guild the application's bot is not in", 50036),
|
INVITE_ACCEPTED_TO_GUILD_NOT_CONTAINING_BOT: new ApiError(
|
||||||
|
"An invite was accepted to a guild the application's bot is not in",
|
||||||
|
50036
|
||||||
|
),
|
||||||
INVALID_API_VERSION: new ApiError("Invalid API version provided", 50041),
|
INVALID_API_VERSION: new ApiError("Invalid API version provided", 50041),
|
||||||
FILE_EXCEEDS_MAXIMUM_SIZE: new ApiError("File uploaded exceeds the maximum size", 50045),
|
FILE_EXCEEDS_MAXIMUM_SIZE: new ApiError("File uploaded exceeds the maximum size", 50045),
|
||||||
INVALID_FILE_UPLOADED: new ApiError("Invalid file uploaded", 50046),
|
INVALID_FILE_UPLOADED: new ApiError("Invalid file uploaded", 50046),
|
||||||
CANNOT_SELF_REDEEM_GIFT: new ApiError("Cannot self-redeem this gift", 50054),
|
CANNOT_SELF_REDEEM_GIFT: new ApiError("Cannot self-redeem this gift", 50054),
|
||||||
PAYMENT_SOURCE_REQUIRED: new ApiError("Payment source required to redeem gift", 50070),
|
PAYMENT_SOURCE_REQUIRED: new ApiError("Payment source required to redeem gift", 50070),
|
||||||
CANNOT_DELETE_COMMUNITY_REQUIRED_CHANNEL: new ApiError("Cannot delete a channel required for Community guilds", 50074),
|
CANNOT_DELETE_COMMUNITY_REQUIRED_CHANNEL: new ApiError(
|
||||||
|
"Cannot delete a channel required for Community guilds",
|
||||||
|
50074
|
||||||
|
),
|
||||||
INVALID_STICKER_SENT: new ApiError("Invalid sticker sent", 50081),
|
INVALID_STICKER_SENT: new ApiError("Invalid sticker sent", 50081),
|
||||||
CANNOT_EDIT_ARCHIVED_THREAD: new ApiError(
|
CANNOT_EDIT_ARCHIVED_THREAD: new ApiError(
|
||||||
"Tried to perform an operation on an archived thread, such as editing a message or adding a user to the thread",
|
"Tried to perform an operation on an archived thread, such as editing a message or adding a user to the thread",
|
||||||
50083
|
50083
|
||||||
),
|
),
|
||||||
INVALID_THREAD_NOTIFICATION_SETTINGS: new ApiError("Invalid thread notification settings", 50084),
|
INVALID_THREAD_NOTIFICATION_SETTINGS: new ApiError("Invalid thread notification settings", 50084),
|
||||||
BEFORE_EARLIER_THAN_THREAD_CREATION_DATE: new ApiError("before value is earlier than the thread creation date", 50085),
|
BEFORE_EARLIER_THAN_THREAD_CREATION_DATE: new ApiError(
|
||||||
|
"before value is earlier than the thread creation date",
|
||||||
|
50085
|
||||||
|
),
|
||||||
SERVER_NOT_AVAILABLE_IN_YOUR_LOCATION: new ApiError("This server is not available in your location", 50095),
|
SERVER_NOT_AVAILABLE_IN_YOUR_LOCATION: new ApiError("This server is not available in your location", 50095),
|
||||||
SERVER_NEEDS_MONETIZATION_ENABLED: new ApiError("This server needs monetization enabled in order to perform this action", 50097),
|
SERVER_NEEDS_MONETIZATION_ENABLED: new ApiError(
|
||||||
|
"This server needs monetization enabled in order to perform this action",
|
||||||
|
50097
|
||||||
|
),
|
||||||
TWO_FACTOR_REQUIRED: new ApiError("Two factor is required for this operation", 60003),
|
TWO_FACTOR_REQUIRED: new ApiError("Two factor is required for this operation", 60003),
|
||||||
NO_USERS_WITH_DISCORDTAG_EXIST: new ApiError("No users with DiscordTag exist", 80004),
|
NO_USERS_WITH_DISCORDTAG_EXIST: new ApiError("No users with DiscordTag exist", 80004),
|
||||||
REACTION_BLOCKED: new ApiError("Reaction was blocked", 90001),
|
REACTION_BLOCKED: new ApiError("Reaction was blocked", 90001),
|
||||||
@ -653,17 +694,33 @@ export const DiscordApiErrors = {
|
|||||||
THREAD_ALREADY_CREATED_FOR_THIS_MESSAGE: new ApiError("A thread has already been created for this message", 160004),
|
THREAD_ALREADY_CREATED_FOR_THIS_MESSAGE: new ApiError("A thread has already been created for this message", 160004),
|
||||||
THREAD_IS_LOCKED: new ApiError("Thread is locked", 160005),
|
THREAD_IS_LOCKED: new ApiError("Thread is locked", 160005),
|
||||||
MAXIMUM_NUMBER_OF_ACTIVE_THREADS: new ApiError("Maximum number of active threads reached", 160006),
|
MAXIMUM_NUMBER_OF_ACTIVE_THREADS: new ApiError("Maximum number of active threads reached", 160006),
|
||||||
MAXIMUM_NUMBER_OF_ACTIVE_ANNOUNCEMENT_THREADS: new ApiError("Maximum number of active announcement threads reached", 160007),
|
MAXIMUM_NUMBER_OF_ACTIVE_ANNOUNCEMENT_THREADS: new ApiError(
|
||||||
|
"Maximum number of active announcement threads reached",
|
||||||
|
160007
|
||||||
|
),
|
||||||
INVALID_JSON_FOR_UPLOADED_LOTTIE_FILE: new ApiError("Invalid JSON for uploaded Lottie file", 170001),
|
INVALID_JSON_FOR_UPLOADED_LOTTIE_FILE: new ApiError("Invalid JSON for uploaded Lottie file", 170001),
|
||||||
LOTTIES_CANNOT_CONTAIN_RASTERIZED_IMAGES: new ApiError("Uploaded Lotties cannot contain rasterized images such as PNG or JPEG", 170002),
|
LOTTIES_CANNOT_CONTAIN_RASTERIZED_IMAGES: new ApiError(
|
||||||
|
"Uploaded Lotties cannot contain rasterized images such as PNG or JPEG",
|
||||||
|
170002
|
||||||
|
),
|
||||||
STICKER_MAXIMUM_FRAMERATE: new ApiError("Sticker maximum framerate exceeded", 170003),
|
STICKER_MAXIMUM_FRAMERATE: new ApiError("Sticker maximum framerate exceeded", 170003),
|
||||||
STICKER_MAXIMUM_FRAME_COUNT: new ApiError("Sticker frame count exceeds maximum of {} frames", 170004, undefined, ["1000"]),
|
STICKER_MAXIMUM_FRAME_COUNT: new ApiError("Sticker frame count exceeds maximum of {} frames", 170004, undefined, [
|
||||||
|
"1000",
|
||||||
|
]),
|
||||||
LOTTIE_ANIMATION_MAXIMUM_DIMENSIONS: new ApiError("Lottie animation maximum dimensions exceeded", 170005),
|
LOTTIE_ANIMATION_MAXIMUM_DIMENSIONS: new ApiError("Lottie animation maximum dimensions exceeded", 170005),
|
||||||
STICKER_FRAME_RATE_TOO_SMALL_OR_TOO_LARGE: new ApiError("Sticker frame rate is either too small or too large", 170006),
|
STICKER_FRAME_RATE_TOO_SMALL_OR_TOO_LARGE: new ApiError(
|
||||||
STICKER_ANIMATION_DURATION_MAXIMUM: new ApiError("Sticker animation duration exceeds maximum of {} seconds", 170007, undefined, ["5"]),
|
"Sticker frame rate is either too small or too large",
|
||||||
|
170006
|
||||||
|
),
|
||||||
|
STICKER_ANIMATION_DURATION_MAXIMUM: new ApiError(
|
||||||
|
"Sticker animation duration exceeds maximum of {} seconds",
|
||||||
|
170007,
|
||||||
|
undefined,
|
||||||
|
["5"]
|
||||||
|
),
|
||||||
|
|
||||||
//Other errors
|
//Other errors
|
||||||
UNKNOWN_VOICE_STATE: new ApiError("Unknown Voice State", 10065, 404)
|
UNKNOWN_VOICE_STATE: new ApiError("Unknown Voice State", 10065, 404),
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -689,7 +746,7 @@ export const MembershipStates = [
|
|||||||
// They start at 1
|
// They start at 1
|
||||||
null,
|
null,
|
||||||
"INVITED",
|
"INVITED",
|
||||||
"ACCEPTED"
|
"ACCEPTED",
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -702,7 +759,7 @@ export const WebhookTypes = [
|
|||||||
// They start at 1
|
// They start at 1
|
||||||
null,
|
null,
|
||||||
"Incoming",
|
"Incoming",
|
||||||
"Channel Follower"
|
"Channel Follower",
|
||||||
];
|
];
|
||||||
|
|
||||||
function keyMirror(arr: string[]) {
|
function keyMirror(arr: string[]) {
|
@ -1,13 +1,14 @@
|
|||||||
export * from "./Database";
|
export * from "./ApiError";
|
||||||
|
|
||||||
export * from "./BitField";
|
export * from "./BitField";
|
||||||
export * from "./Config";
|
|
||||||
export * from "./checkToken";
|
export * from "./checkToken";
|
||||||
|
export * from "./Config";
|
||||||
|
export * from "./Constants";
|
||||||
|
export * from "./Database";
|
||||||
export * from "./Event";
|
export * from "./Event";
|
||||||
export * from "./Intents";
|
export * from "./Intents";
|
||||||
export * from "./MessageFlags";
|
export * from "./MessageFlags";
|
||||||
export * from "./Permissions";
|
export * from "./Permissions";
|
||||||
export * from "./Snowflake";
|
|
||||||
export * from "./RabbitMQ";
|
export * from "./RabbitMQ";
|
||||||
export * from "./Regex";
|
export * from "./Regex";
|
||||||
|
export * from "./Snowflake";
|
||||||
export * from "./String";
|
export * from "./String";
|
||||||
|
Loading…
Reference in New Issue
Block a user