mirror of
https://github.com/spacebarchat/server.git
synced 2026-09-01 20:09:01 +00:00
DEPRECATION: Move most select queries to object instead of string[]
This commit is contained in:
Generated
+43
-41
@@ -50,49 +50,50 @@
|
||||
<option name="hideEmptyMiddlePackages" value="true" />
|
||||
<option name="showLibraryContents" value="true" />
|
||||
</component>
|
||||
<component name="PropertiesComponent">{
|
||||
"keyToString": {
|
||||
"NIXITCH_NIXPKGS_CONFIG": "/etc/nix/nixpkgs-config.nix",
|
||||
"NIXITCH_NIX_CONF_DIR": "",
|
||||
"NIXITCH_NIX_OTHER_STORES": "",
|
||||
"NIXITCH_NIX_PATH": "/home/Rory/.nix-defexpr/channels:nixpkgs=/nix/store/wb6agba4kfsxpbnb5hzlq58vkjzvbsk6-source",
|
||||
"NIXITCH_NIX_PROFILES": "/run/current-system/sw /nix/var/nix/profiles/default /etc/profiles/per-user/Rory /home/Rory/.local/state/nix/profile /nix/profile /home/Rory/.nix-profile",
|
||||
"NIXITCH_NIX_REMOTE": "",
|
||||
"NIXITCH_NIX_USER_PROFILE_DIR": "/nix/var/nix/profiles/per-user/Rory",
|
||||
"Node.js.Server.ts.executor": "Debug",
|
||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||
"RunOnceActivity.git.unshallow": "true",
|
||||
"git-widget-placeholder": "master",
|
||||
"javascript.nodejs.core.library.configured.version": "24.8.0",
|
||||
"javascript.nodejs.core.library.typings.version": "24.7.0",
|
||||
"last_opened_file_path": "/home/Rory/git/spacebar/server-master/src/util/migration/postgres",
|
||||
"node.js.detected.package.eslint": "true",
|
||||
"node.js.detected.package.standard": "true",
|
||||
"node.js.selected.package.eslint": "(autodetect)",
|
||||
"node.js.selected.package.standard": "",
|
||||
"node.js.selected.package.tslint": "(autodetect)",
|
||||
"nodejs_interpreter_path": "node",
|
||||
"nodejs_package_manager_path": "npm",
|
||||
"npm.Start API.executor": "Run",
|
||||
"npm.Start CDN.executor": "Run",
|
||||
"npm.Start Gateway.executor": "Run",
|
||||
"npm.build.executor": "Run",
|
||||
"npm.start.executor": "Debug",
|
||||
"prettierjs.PrettierConfiguration.Package": "/home/Rory/git/spacebar/server-master/node_modules/prettier",
|
||||
"settings.editor.selected.configurable": "com.github.copilot.settings.customInstructions.CopilotInstructionsConfigurable",
|
||||
"ts.external.directory.path": "/home/Rory/git/spacebar/server-master/node_modules/typescript/lib"
|
||||
<component name="PropertiesComponent"><![CDATA[{
|
||||
"keyToString": {
|
||||
"NIXITCH_NIXPKGS_CONFIG": "/etc/nix/nixpkgs-config.nix",
|
||||
"NIXITCH_NIX_CONF_DIR": "",
|
||||
"NIXITCH_NIX_OTHER_STORES": "",
|
||||
"NIXITCH_NIX_PATH": "/home/Rory/.nix-defexpr/channels:nixpkgs=/nix/store/wb6agba4kfsxpbnb5hzlq58vkjzvbsk6-source",
|
||||
"NIXITCH_NIX_PROFILES": "/run/current-system/sw /nix/var/nix/profiles/default /etc/profiles/per-user/Rory /home/Rory/.local/state/nix/profile /nix/profile /home/Rory/.nix-profile",
|
||||
"NIXITCH_NIX_REMOTE": "",
|
||||
"NIXITCH_NIX_USER_PROFILE_DIR": "/nix/var/nix/profiles/per-user/Rory",
|
||||
"Node.js.Server.ts.executor": "Debug",
|
||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||
"RunOnceActivity.git.unshallow": "true",
|
||||
"git-widget-placeholder": "master",
|
||||
"javascript.nodejs.core.library.configured.version": "24.11.1",
|
||||
"javascript.nodejs.core.library.typings.version": "24.10.4",
|
||||
"last_opened_file_path": "/home/Rory/git/spacebar/server-master/src/util/migration/postgres",
|
||||
"node.js.detected.package.eslint": "true",
|
||||
"node.js.detected.package.standard": "true",
|
||||
"node.js.selected.package.eslint": "(autodetect)",
|
||||
"node.js.selected.package.standard": "",
|
||||
"node.js.selected.package.tslint": "(autodetect)",
|
||||
"nodejs_interpreter_path": "node",
|
||||
"nodejs_package_manager_path": "npm",
|
||||
"npm.Start API.executor": "Run",
|
||||
"npm.Start CDN.executor": "Run",
|
||||
"npm.Start Gateway.executor": "Run",
|
||||
"npm.build.executor": "Run",
|
||||
"npm.build:src.executor": "Run",
|
||||
"npm.start.executor": "Debug",
|
||||
"prettierjs.PrettierConfiguration.Package": "/home/Rory/git/spacebar/server-master/node_modules/prettier",
|
||||
"settings.editor.selected.configurable": "com.github.copilot.settings.customInstructions.CopilotInstructionsConfigurable",
|
||||
"ts.external.directory.path": "/home/Rory/git/spacebar/server-master/node_modules/typescript/lib"
|
||||
},
|
||||
"keyToStringList": {
|
||||
"DatabaseDriversLRU": [
|
||||
"postgresql"
|
||||
"keyToStringList": {
|
||||
"DatabaseDriversLRU": [
|
||||
"postgresql"
|
||||
],
|
||||
"GitStage.ChangesTree.GroupingKeys": [
|
||||
"directory",
|
||||
"module",
|
||||
"repository"
|
||||
"GitStage.ChangesTree.GroupingKeys": [
|
||||
"directory",
|
||||
"module",
|
||||
"repository"
|
||||
]
|
||||
}
|
||||
}</component>
|
||||
}]]></component>
|
||||
<component name="RecentsManager">
|
||||
<key name="CopyFile.RECENT_KEYS">
|
||||
<recent name="$PROJECT_DIR$/src/util/migration/postgres" />
|
||||
@@ -124,14 +125,15 @@
|
||||
<entry key="Start CDN" value="STOPPED" />
|
||||
<entry key="Start Gateway" value="STOPPED" />
|
||||
<entry key="Start bundle" value="STOPPED" />
|
||||
<entry key="build" value="FAILED" />
|
||||
<entry key="build" value="STOPPED" />
|
||||
<entry key="build:src" value="STOPPED" />
|
||||
</map>
|
||||
</value>
|
||||
</entry>
|
||||
</map>
|
||||
</option>
|
||||
</component>
|
||||
<component name="RunManager" selected="npm.Start CDN">
|
||||
<component name="RunManager" selected="Compound.Start separated">
|
||||
<list>
|
||||
<item itemvalue="Compound.Start separated" />
|
||||
<item itemvalue="npm.Start API" />
|
||||
|
||||
@@ -83,7 +83,7 @@ router.patch(
|
||||
if (body.guild_id) {
|
||||
const guild = await Guild.findOneOrFail({
|
||||
where: { id: body.guild_id },
|
||||
select: ["owner_id"],
|
||||
select: { owner_id: true },
|
||||
});
|
||||
if (guild.owner_id != req.user_id) throw new HTTPError("You must be the owner of the guild to link it to an application", 400);
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ router.patch(
|
||||
if (body.guild_id) {
|
||||
const guild = await Guild.findOneOrFail({
|
||||
where: { id: body.guild_id },
|
||||
select: ["owner_id"],
|
||||
select: { owner_id: true },
|
||||
});
|
||||
if (guild.owner_id != req.user_id) throw new HTTPError("You must be the owner of the guild to link it to an application", 400);
|
||||
}
|
||||
|
||||
@@ -63,7 +63,7 @@ router.post(
|
||||
|
||||
const user = await User.findOne({
|
||||
where: [{ phone: login }, { email: login }],
|
||||
select: ["username", "id", "email"],
|
||||
select: { username: true, id: true, email: true },
|
||||
}).catch(() => {});
|
||||
|
||||
if (user && user.email) {
|
||||
|
||||
@@ -67,7 +67,7 @@ router.post(
|
||||
|
||||
const user = await User.findOneOrFail({
|
||||
where: [{ phone: login }, { email: login }],
|
||||
select: ["data", "id", "disabled", "deleted", "totp_secret", "mfa_enabled", "webauthn_enabled", "security_keys", "verified"],
|
||||
select: { data: true, id: true, disabled: true, deleted: true, totp_secret: true, mfa_enabled: true, webauthn_enabled: true, security_keys: true, verified: true },
|
||||
relations: ["security_keys", "settings"],
|
||||
}).catch(() => {
|
||||
throw FieldErrors({
|
||||
|
||||
@@ -45,7 +45,7 @@ router.post(
|
||||
where: {
|
||||
totp_last_ticket: ticket,
|
||||
},
|
||||
select: ["id", "totp_secret"],
|
||||
select: { id: true, totp_secret: true },
|
||||
relations: ["settings"],
|
||||
});
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ router.post(
|
||||
where: {
|
||||
totp_last_ticket: ticket,
|
||||
},
|
||||
select: ["id"],
|
||||
select: { id: true },
|
||||
relations: ["settings"],
|
||||
});
|
||||
|
||||
|
||||
@@ -111,7 +111,7 @@ router.post(
|
||||
// TODO: check if fingerprint was eligible generated
|
||||
const exists = await User.findOne({
|
||||
where: { fingerprints: body.fingerprint },
|
||||
select: ["id"],
|
||||
select: { id: true },
|
||||
});
|
||||
|
||||
if (exists) {
|
||||
|
||||
@@ -39,7 +39,7 @@ router.post(
|
||||
async (req: Request, res: Response) => {
|
||||
const user = await User.findOneOrFail({
|
||||
where: { id: req.user_id },
|
||||
select: ["username", "email", "verified"],
|
||||
select: { username: true, email: true, verified: true },
|
||||
});
|
||||
|
||||
if (!user.email) {
|
||||
|
||||
@@ -37,7 +37,7 @@ router.post(
|
||||
|
||||
const user = await User.findOneOrFail({
|
||||
where: { id: req.user_id },
|
||||
select: ["data"],
|
||||
select: { data: true },
|
||||
});
|
||||
|
||||
if (!(await bcrypt.compare(password, user.data.hash || ""))) {
|
||||
|
||||
@@ -46,7 +46,7 @@ router.post(
|
||||
const { channel_id } = req.params;
|
||||
const channel = await Channel.findOneOrFail({
|
||||
where: { id: channel_id },
|
||||
select: ["id", "name", "type", "guild_id"],
|
||||
select: { id: true, name: true, type: true, guild_id: true },
|
||||
});
|
||||
isTextChannel(channel.type);
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ router.get(
|
||||
const { channel_id } = req.params;
|
||||
const channel = await Channel.findOneOrFail({
|
||||
where: { guild_id: req.params.guild_id },
|
||||
select: ["id"],
|
||||
select: { id: true },
|
||||
});
|
||||
const {
|
||||
content,
|
||||
|
||||
@@ -43,7 +43,7 @@ router.post(
|
||||
|
||||
const guild = await Guild.findOneOrFail({
|
||||
where: { id: guild_id },
|
||||
select: ["owner_id"],
|
||||
select: { owner_id: true },
|
||||
});
|
||||
if (guild.owner_id !== req.user_id) throw new HTTPError("You are not the owner of this guild", 401);
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@ router.get(
|
||||
// get all channel IDs that this user can access
|
||||
const channels = await Channel.find({
|
||||
where: { guild_id: req.params.guild_id },
|
||||
select: ["id"],
|
||||
select: { id: true },
|
||||
});
|
||||
const ids = [];
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ router.get("/", route({}), async (req: Request, res: Response) => {
|
||||
|
||||
// TODO: Is this route really not paginated?
|
||||
const members = await Member.find({
|
||||
select: ["id"],
|
||||
select: { id: true },
|
||||
where: {
|
||||
roles: {
|
||||
id: role_id,
|
||||
|
||||
@@ -26,7 +26,7 @@ router.get("/", route({}), async (req: Request, res: Response) => {
|
||||
const { guild_id } = req.params;
|
||||
await Member.IsInGuildOrFail(req.user_id, guild_id);
|
||||
|
||||
const role_ids = await Role.find({ where: { guild_id }, select: ["id"] });
|
||||
const role_ids = await Role.find({ where: { guild_id }, select: { id: true } });
|
||||
const counts: { [id: string]: number } = {};
|
||||
for (const { id } of role_ids) {
|
||||
counts[id] = await Member.count({ where: { roles: { id }, guild_id } });
|
||||
|
||||
@@ -75,7 +75,7 @@ router.get(
|
||||
id: req.user_id,
|
||||
bot: false,
|
||||
},
|
||||
select: ["id", "username", "avatar", "discriminator", "public_flags"],
|
||||
select: { id: true, username: true, avatar: true, discriminator: true, public_flags: true },
|
||||
});
|
||||
|
||||
const guilds = await Member.find({
|
||||
@@ -83,10 +83,11 @@ router.get(
|
||||
id: req.user_id,
|
||||
},
|
||||
relations: ["guild", "roles", "user"],
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
//@ts-ignore
|
||||
// prettier-ignore
|
||||
select: ["guild.id", "guild.name", "guild.icon", "guild.mfa_level", "guild.owner_id", "roles.id", "user.flags"],
|
||||
select: {
|
||||
guild: { id: true, name: true, icon: true, mfa_level: true, owner_id: true },
|
||||
roles: { id: true },
|
||||
user: { flags: true },
|
||||
},
|
||||
});
|
||||
|
||||
const guildsWithPermissions = guilds.map((x) => {
|
||||
|
||||
@@ -38,7 +38,7 @@ router.get(
|
||||
async (req: Request, res: Response) => {
|
||||
const user = await User.findOneOrFail({
|
||||
where: { id: req.user_id },
|
||||
select: ["data"],
|
||||
select: { data: true },
|
||||
});
|
||||
|
||||
res.send({
|
||||
|
||||
@@ -38,7 +38,7 @@ router.get(
|
||||
async (req: Request, res: Response) => {
|
||||
const user = await User.findOneOrFail({
|
||||
where: { id: req.user_id },
|
||||
select: ["data"],
|
||||
select: { data: true },
|
||||
});
|
||||
|
||||
res.send({
|
||||
|
||||
@@ -64,7 +64,7 @@ router.post(
|
||||
async (req: Request, res: Response) => {
|
||||
const user = await User.findOneOrFail({
|
||||
where: { id: req.user_id },
|
||||
select: ["mfa_enabled"],
|
||||
select: { mfa_enabled: true },
|
||||
});
|
||||
if (!user.mfa_enabled) throw new HTTPError("You must enable MFA to create a team");
|
||||
|
||||
|
||||
+12
-1
@@ -55,7 +55,18 @@ router.get("/", route({}), async (req: Request, res: Response) => {
|
||||
external_id: connection_id,
|
||||
user_id: req.user_id,
|
||||
},
|
||||
select: ["external_id", "type", "name", "verified", "visibility", "show_activity", "revoked", "token_data", "friend_sync", "integrations"],
|
||||
select: {
|
||||
external_id: true,
|
||||
type: true,
|
||||
name: true,
|
||||
verified: true,
|
||||
visibility: true,
|
||||
show_activity: true,
|
||||
revoked: true,
|
||||
token_data: true,
|
||||
friend_sync: true,
|
||||
integrations: true,
|
||||
},
|
||||
});
|
||||
if (!connectedAccount) throw DiscordApiErrors.UNKNOWN_CONNECTION;
|
||||
if (connectedAccount.revoked) throw DiscordApiErrors.CONNECTION_REVOKED;
|
||||
|
||||
@@ -33,7 +33,7 @@ router.patch("/", route({ requestBody: "ConnectionUpdateSchema" }), async (req:
|
||||
external_id: connection_id,
|
||||
type: connection_name,
|
||||
},
|
||||
select: ["external_id", "type", "name", "verified", "visibility", "show_activity", "revoked", "friend_sync", "integrations"],
|
||||
select: { external_id: true, type: true, name: true, verified: true, visibility: true, show_activity: true, revoked: true, friend_sync: true, integrations: true },
|
||||
});
|
||||
|
||||
if (!connection) return DiscordApiErrors.UNKNOWN_CONNECTION;
|
||||
|
||||
@@ -27,7 +27,18 @@ router.get("/", route({}), async (req: Request, res: Response) => {
|
||||
where: {
|
||||
user_id: req.user_id,
|
||||
},
|
||||
select: ["external_id", "type", "name", "verified", "visibility", "show_activity", "revoked", "token_data", "friend_sync", "integrations"],
|
||||
select: {
|
||||
external_id: true,
|
||||
type: true,
|
||||
name: true,
|
||||
verified: true,
|
||||
visibility: true,
|
||||
show_activity: true,
|
||||
revoked: true,
|
||||
token_data: true,
|
||||
friend_sync: true,
|
||||
integrations: true,
|
||||
},
|
||||
});
|
||||
|
||||
res.json(connections.map((x) => new ConnectedAccountDTO(x, true)));
|
||||
|
||||
@@ -40,7 +40,7 @@ router.post(
|
||||
async (req: Request, res: Response) => {
|
||||
const user = await User.findOneOrFail({
|
||||
where: { id: req.user_id },
|
||||
select: ["data"],
|
||||
select: { data: true },
|
||||
}); //User object
|
||||
let correctpass = true;
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ router.post(
|
||||
async (req: Request, res: Response) => {
|
||||
const user = await User.findOneOrFail({
|
||||
where: { id: req.user_id },
|
||||
select: ["data"],
|
||||
select: { data: true },
|
||||
}); //User object
|
||||
let correctpass = true;
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ router.delete(
|
||||
const { guild_id } = req.params;
|
||||
const guild = await Guild.findOneOrFail({
|
||||
where: { id: guild_id },
|
||||
select: ["owner_id"],
|
||||
select: { owner_id: true },
|
||||
});
|
||||
|
||||
if (!guild) throw new HTTPError("Guild doesn't exist", 404);
|
||||
|
||||
@@ -35,7 +35,7 @@ router.get(
|
||||
async (req: Request, res: Response) => {
|
||||
const user = await Member.findOneOrFail({
|
||||
where: { id: req.user_id, guild_id: req.params.guild_id },
|
||||
select: ["settings"],
|
||||
select: { settings: true },
|
||||
});
|
||||
return res.json(user.settings);
|
||||
},
|
||||
@@ -66,7 +66,7 @@ router.patch(
|
||||
|
||||
const user = await Member.findOneOrFail({
|
||||
where: { id: req.user_id, guild_id: req.params.guild_id },
|
||||
select: ["settings"],
|
||||
select: { settings: true },
|
||||
});
|
||||
OrmUtils.mergeDeep(user.settings || {}, body);
|
||||
Member.update({ id: req.user_id, guild_id: req.params.guild_id }, user);
|
||||
|
||||
@@ -49,7 +49,7 @@ router.post(
|
||||
|
||||
const user = await User.findOneOrFail({
|
||||
where: { id: req.user_id },
|
||||
select: ["data"],
|
||||
select: { data: true },
|
||||
});
|
||||
|
||||
if (!(await bcrypt.compare(password, user.data.hash || ""))) {
|
||||
|
||||
@@ -43,7 +43,7 @@ router.post(
|
||||
|
||||
const user = await User.findOneOrFail({
|
||||
where: { id: req.user_id },
|
||||
select: ["totp_secret"],
|
||||
select: { totp_secret: true },
|
||||
});
|
||||
|
||||
const backup = await BackupCode.findOne({ where: { code: body.code } });
|
||||
|
||||
@@ -47,7 +47,7 @@ router.post(
|
||||
|
||||
const user = await User.findOneOrFail({
|
||||
where: { id: req.user_id },
|
||||
select: ["data", "email"],
|
||||
select: { data: true, email: true },
|
||||
});
|
||||
|
||||
// TODO: Are guests allowed to enable 2fa?
|
||||
|
||||
@@ -80,7 +80,7 @@ router.post(
|
||||
where: {
|
||||
id: req.user_id,
|
||||
},
|
||||
select: ["data", "id", "disabled", "deleted", "totp_secret", "mfa_enabled", "username"],
|
||||
select: { data: true, id: true, disabled: true, deleted: true, totp_secret: true, mfa_enabled: true, username: true },
|
||||
relations: ["settings"],
|
||||
});
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ router.get(
|
||||
const user = await User.findOneOrFail({
|
||||
where: { id: req.user_id },
|
||||
relations: ["relationships", "relationships.to"],
|
||||
select: ["id", "relationships"],
|
||||
select: { id: true, relationships: true },
|
||||
});
|
||||
|
||||
const related_users = user.relationships.map((r) => r.toPublicRelationship());
|
||||
|
||||
@@ -192,13 +192,13 @@ export async function onIdentify(this: WebSocket, data: Payload) {
|
||||
timePromise(() =>
|
||||
Application.findOne({
|
||||
where: { id: this.user_id },
|
||||
select: ["id", "flags"],
|
||||
select: { id: true, flags: true },
|
||||
}),
|
||||
),
|
||||
timePromise(() =>
|
||||
ReadState.find({
|
||||
where: { user_id: this.user_id },
|
||||
select: ["id", "channel_id", "last_message_id", "last_pin_timestamp", "mention_count"],
|
||||
select: { id: true, channel_id: true, last_message_id: true, last_pin_timestamp: true, mention_count: true },
|
||||
}),
|
||||
),
|
||||
timePromise(() =>
|
||||
|
||||
@@ -29,7 +29,7 @@ export async function onPresenceUpdate(this: WebSocket, { d }: Payload) {
|
||||
await Session.update({ session_id: this.session_id }, { status: presence.status, activities: presence.activities });
|
||||
|
||||
const session = await Session.findOneOrFail({
|
||||
select: ["client_status"],
|
||||
select: { client_status: true },
|
||||
where: { session_id: this.session_id },
|
||||
});
|
||||
|
||||
|
||||
@@ -169,7 +169,7 @@ export class Member extends BaseClassWithoutId {
|
||||
|
||||
static async removeFromGuild(user_id: string, guild_id: string) {
|
||||
const guild = await Guild.findOneOrFail({
|
||||
select: ["owner_id"],
|
||||
select: { owner_id: true },
|
||||
where: { id: guild_id },
|
||||
});
|
||||
if (guild.owner_id === user_id) throw new Error("The owner cannot be removed of the guild");
|
||||
@@ -215,7 +215,7 @@ export class Member extends BaseClassWithoutId {
|
||||
}),
|
||||
Role.findOneOrFail({
|
||||
where: { id: role_id, guild_id },
|
||||
select: ["id"],
|
||||
select: { id: true },
|
||||
}),
|
||||
]);
|
||||
member.roles.push(Role.create({ id: role_id }));
|
||||
|
||||
@@ -217,7 +217,7 @@ export class User extends BaseClass {
|
||||
// First we need to figure out the currently highest discrimnator for the given username and then increment it
|
||||
const users = await User.find({
|
||||
where: { username },
|
||||
select: ["discriminator"],
|
||||
select: { discriminator: true },
|
||||
});
|
||||
const highestDiscriminator = Math.max(0, ...users.map((u) => Number(u.discriminator)));
|
||||
|
||||
@@ -236,7 +236,7 @@ export class User extends BaseClass {
|
||||
const discriminator = Random.nextInt(1, 9999).toString().padStart(4, "0");
|
||||
const exists = await User.findOne({
|
||||
where: { discriminator, username: username },
|
||||
select: ["id"],
|
||||
select: { id: true },
|
||||
});
|
||||
if (!exists) return discriminator;
|
||||
}
|
||||
|
||||
@@ -256,7 +256,7 @@ export async function getPermission(
|
||||
let guild: Guild | undefined;
|
||||
const user = await User.findOneOrFail({
|
||||
where: { id: user_id },
|
||||
select: ["id", "flags"],
|
||||
select: { id: true, flags: true },
|
||||
});
|
||||
|
||||
if (typeof channel_id === "string") {
|
||||
|
||||
Reference in New Issue
Block a user