mirror of
https://github.com/tiramisulabs/seyfert.git
synced 2025-07-01 20:46:08 +00:00
feat: cacheResource.flush
This commit is contained in:
parent
4f8c1d09c7
commit
7591c11446
@ -22,7 +22,7 @@ export interface ApiHandlerInternalOptions extends MakeRequired<ApiHandlerOption
|
|||||||
|
|
||||||
export interface RawFile {
|
export interface RawFile {
|
||||||
contentType?: string;
|
contentType?: string;
|
||||||
data: ArrayBuffer | Buffer | Uint8Array | boolean | number | string;
|
data: ArrayBuffer | Buffer | Uint8Array | Uint8ClampedArray | boolean | number | string;
|
||||||
key?: string;
|
key?: string;
|
||||||
filename: string;
|
filename: string;
|
||||||
}
|
}
|
||||||
|
@ -2,13 +2,14 @@ import { randomBytes } from 'node:crypto';
|
|||||||
import { promises } from 'node:fs';
|
import { promises } from 'node:fs';
|
||||||
import path from 'node:path';
|
import path from 'node:path';
|
||||||
import type { RawFile, UsingClient } from '..';
|
import type { RawFile, UsingClient } from '..';
|
||||||
|
import { isBufferLike } from '../api/utils/utils';
|
||||||
import type { ImageResolvable, ObjectToLower } from '../common';
|
import type { ImageResolvable, ObjectToLower } from '../common';
|
||||||
import { Base } from '../structures/extra/Base';
|
import { Base } from '../structures/extra/Base';
|
||||||
import type { APIAttachment, RESTAPIAttachment } from '../types';
|
import type { APIAttachment, RESTAPIAttachment } from '../types';
|
||||||
|
|
||||||
export interface AttachmentResolvableMap {
|
export interface AttachmentResolvableMap {
|
||||||
url: string;
|
url: string;
|
||||||
buffer: Buffer | ArrayBuffer;
|
buffer: Buffer | ArrayBuffer | Uint8Array | Uint8ClampedArray;
|
||||||
path: string;
|
path: string;
|
||||||
}
|
}
|
||||||
export type AttachmentResolvable =
|
export type AttachmentResolvable =
|
||||||
@ -206,7 +207,7 @@ export async function resolveAttachmentData(
|
|||||||
return { data: await promises.readFile(file) };
|
return { data: await promises.readFile(file) };
|
||||||
}
|
}
|
||||||
case 'buffer': {
|
case 'buffer': {
|
||||||
if (Buffer.isBuffer(data)) return { data };
|
if (isBufferLike(data)) return { data };
|
||||||
// @ts-expect-error
|
// @ts-expect-error
|
||||||
if (typeof data[Symbol.asyncIterator] === 'function') {
|
if (typeof data[Symbol.asyncIterator] === 'function') {
|
||||||
const buffers: Buffer[] = [];
|
const buffers: Buffer[] = [];
|
||||||
|
8
src/cache/resources/default/base.ts
vendored
8
src/cache/resources/default/base.ts
vendored
@ -93,6 +93,14 @@ export class BaseResource<T = any, S = any> {
|
|||||||
return this.adapter.removeToRelationship(this.namespace, id);
|
return this.adapter.removeToRelationship(this.namespace, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
flush() {
|
||||||
|
return fakePromise(this.adapter.keys(this.namespace)).then(keys => {
|
||||||
|
return fakePromise(this.adapter.bulkRemove(keys)).then(() => {
|
||||||
|
return this.adapter.removeRelationship(this.namespace);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
hashId(id: string) {
|
hashId(id: string) {
|
||||||
return id.startsWith(this.namespace) ? id : `${this.namespace}.${id}`;
|
return id.startsWith(this.namespace) ? id : `${this.namespace}.${id}`;
|
||||||
}
|
}
|
||||||
|
13
src/cache/resources/default/guild-based.ts
vendored
13
src/cache/resources/default/guild-based.ts
vendored
@ -149,4 +149,17 @@ export class GuildBasedResource<T = any, S = any> {
|
|||||||
hashGuildId(guild: string, id: string) {
|
hashGuildId(guild: string, id: string) {
|
||||||
return id.startsWith(this.namespace) ? id : `${this.namespace}.${guild}.${id}`;
|
return id.startsWith(this.namespace) ? id : `${this.namespace}.${guild}.${id}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
flush(guild: '*' | (string & {}) = '*') {
|
||||||
|
return fakePromise(this.keys(guild)).then(keys => {
|
||||||
|
return fakePromise(this.adapter.bulkRemove(keys)).then(() => {
|
||||||
|
const maybePromises: (unknown | Promise<unknown>)[] = [];
|
||||||
|
for (const i of keys) {
|
||||||
|
const guildId = i.split('.').at(-2)!;
|
||||||
|
maybePromises.push(this.removeRelationship(guildId));
|
||||||
|
}
|
||||||
|
return this.adapter.isAsync ? Promise.all(maybePromises) : maybePromises;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
8
src/cache/resources/default/guild-related.ts
vendored
8
src/cache/resources/default/guild-related.ts
vendored
@ -164,4 +164,12 @@ export class GuildRelatedResource<T = any, S = any> {
|
|||||||
hashId(id: string) {
|
hashId(id: string) {
|
||||||
return id.startsWith(this.namespace) ? id : `${this.namespace}.${id}`;
|
return id.startsWith(this.namespace) ? id : `${this.namespace}.${id}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
flush(guild: string) {
|
||||||
|
return fakePromise(this.keys(guild)).then(keys => {
|
||||||
|
return fakePromise(this.adapter.bulkRemove(keys)).then(() => {
|
||||||
|
return this.removeRelationship(guild);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,7 +53,6 @@ export enum ApplicationCommandPermissionType {
|
|||||||
* https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-application-command-permissions-constants
|
* https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-application-command-permissions-constants
|
||||||
*/
|
*/
|
||||||
export const APIApplicationCommandPermissionsConstant = {
|
export const APIApplicationCommandPermissionsConstant = {
|
||||||
// eslint-disable-next-line unicorn/prefer-native-coercion-functions
|
|
||||||
Everyone: (guildId: bigint | string): Snowflake => String(guildId),
|
Everyone: (guildId: bigint | string): Snowflake => String(guildId),
|
||||||
AllChannels: (guildId: bigint | string): Snowflake => String(BigInt(guildId) - 1n),
|
AllChannels: (guildId: bigint | string): Snowflake => String(BigInt(guildId) - 1n),
|
||||||
};
|
};
|
||||||
|
@ -98,7 +98,6 @@ export const FormattingPatterns = {
|
|||||||
* The `fullName` (possibly including `name`, `subcommandOrGroup` and `subcommand`) and `id` group properties are present on the `exec` result of this expression
|
* The `fullName` (possibly including `name`, `subcommandOrGroup` and `subcommand`) and `id` group properties are present on the `exec` result of this expression
|
||||||
*/
|
*/
|
||||||
SlashCommand:
|
SlashCommand:
|
||||||
// eslint-disable-next-line unicorn/no-unsafe-regex
|
|
||||||
/<\/(?<fullName>(?<name>[-_\p{Letter}\p{Number}\p{sc=Deva}\p{sc=Thai}]{1,32})(?: (?<subcommandOrGroup>[-_\p{Letter}\p{Number}\p{sc=Deva}\p{sc=Thai}]{1,32}))?(?: (?<subcommand>[-_\p{Letter}\p{Number}\p{sc=Deva}\p{sc=Thai}]{1,32}))?):(?<id>\d{17,20})>/u,
|
/<\/(?<fullName>(?<name>[-_\p{Letter}\p{Number}\p{sc=Deva}\p{sc=Thai}]{1,32})(?: (?<subcommandOrGroup>[-_\p{Letter}\p{Number}\p{sc=Deva}\p{sc=Thai}]{1,32}))?(?: (?<subcommand>[-_\p{Letter}\p{Number}\p{sc=Deva}\p{sc=Thai}]{1,32}))?):(?<id>\d{17,20})>/u,
|
||||||
/**
|
/**
|
||||||
* Regular expression for matching a custom emoji, either static or animated
|
* Regular expression for matching a custom emoji, either static or animated
|
||||||
@ -123,7 +122,6 @@ export const FormattingPatterns = {
|
|||||||
*
|
*
|
||||||
* The `timestamp` and `style` group properties are present on the `exec` result of this expression
|
* The `timestamp` and `style` group properties are present on the `exec` result of this expression
|
||||||
*/
|
*/
|
||||||
// eslint-disable-next-line prefer-named-capture-group
|
|
||||||
Timestamp: /<t:(?<timestamp>-?\d{1,13})(:(?<style>[DFRTdft]))?>/,
|
Timestamp: /<t:(?<timestamp>-?\d{1,13})(:(?<style>[DFRTdft]))?>/,
|
||||||
/**
|
/**
|
||||||
* Regular expression for matching strictly default styled timestamps
|
* Regular expression for matching strictly default styled timestamps
|
||||||
@ -415,7 +413,6 @@ export const PermissionFlagsBits = {
|
|||||||
/**
|
/**
|
||||||
* Allows kicking members
|
* Allows kicking members
|
||||||
*/
|
*/
|
||||||
// eslint-disable-next-line sonarjs/no-identical-expressions
|
|
||||||
KickMembers: 1n << 1n,
|
KickMembers: 1n << 1n,
|
||||||
/**
|
/**
|
||||||
* Allows banning members
|
* Allows banning members
|
||||||
@ -777,7 +774,6 @@ export enum ChannelType {
|
|||||||
*
|
*
|
||||||
* @deprecated This is the old name for {@apilink ChannelType#AnnouncementThread}
|
* @deprecated This is the old name for {@apilink ChannelType#AnnouncementThread}
|
||||||
*/
|
*/
|
||||||
// eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values
|
|
||||||
GuildNewsThread = 10,
|
GuildNewsThread = 10,
|
||||||
/**
|
/**
|
||||||
* A temporary sub-channel within a Guild Text channel
|
* A temporary sub-channel within a Guild Text channel
|
||||||
|
Loading…
x
Reference in New Issue
Block a user