mirror of
https://github.com/tiramisulabs/seyfert.git
synced 2025-07-02 04:56:07 +00:00
feat: before and after state
This commit is contained in:
parent
b44e7d456a
commit
2fe113086e
@ -81,9 +81,10 @@ export class BaseClient {
|
||||
return Buffer.from(token.split('.')[0], 'base64').toString('ascii');
|
||||
}
|
||||
|
||||
options: BaseClientOptions | undefined;
|
||||
options: BaseClientOptions;
|
||||
|
||||
static seyfertConfig?: InternalRuntimeConfigHTTP | InternalRuntimeConfig;
|
||||
/**@internal */
|
||||
static _seyferHttpConfig?: InternalRuntimeConfigHTTP | InternalRuntimeConfig;
|
||||
|
||||
constructor(options?: BaseClientOptions) {
|
||||
this.options = MergeOptions(
|
||||
@ -330,7 +331,7 @@ export class BaseClient {
|
||||
async getRC<
|
||||
T extends InternalRuntimeConfigHTTP | InternalRuntimeConfig = InternalRuntimeConfigHTTP | InternalRuntimeConfig,
|
||||
>() {
|
||||
const seyfertConfig = (BaseClient.seyfertConfig ||
|
||||
const seyfertConfig = (BaseClient._seyferHttpConfig ||
|
||||
(await magicImport(join(process.cwd(), 'seyfert.config.js')).then(x => x.default ?? x))) as T;
|
||||
|
||||
const { locations, debug, ...env } = seyfertConfig;
|
||||
@ -348,7 +349,7 @@ export class BaseClient {
|
||||
output: join(process.cwd(), locations.output),
|
||||
};
|
||||
|
||||
BaseClient.seyfertConfig = seyfertConfig;
|
||||
BaseClient._seyferHttpConfig = seyfertConfig;
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
@ -18,7 +18,7 @@ export class Client<Ready extends boolean = boolean> extends BaseClient {
|
||||
gateway!: ShardManager;
|
||||
events? = new EventHandler(this.logger);
|
||||
me!: If<Ready, ClientUser>;
|
||||
declare options: ClientOptions | undefined;
|
||||
declare options: ClientOptions;
|
||||
memberUpdateHandler = new MemberUpdateHandler();
|
||||
presenceUpdateHandler = new PresenceUpdateHandler();
|
||||
|
||||
@ -147,15 +147,23 @@ export class Client<Ready extends boolean = boolean> extends BaseClient {
|
||||
await this.events?.execute(packet.t, packet, this as Client<true>, shardId);
|
||||
await this.cache.onPacket(packet);
|
||||
break;
|
||||
|
||||
case 'MESSAGE_UPDATE':
|
||||
case 'MESSAGE_DELETE_BULK':
|
||||
case 'MESSAGE_DELETE':
|
||||
await this.events?.execute(packet.t, packet, this as Client<true>, shardId);
|
||||
await this.cache.onPacket(packet);
|
||||
break;
|
||||
case 'GUILD_DELETE':
|
||||
case 'CHANNEL_UPDATE':
|
||||
case 'GUILD_EMOJIS_UPDATE':
|
||||
case 'GUILD_UPDATE':
|
||||
case 'GUILD_ROLE_UPDATE':
|
||||
case 'GUILD_ROLE_DELETE':
|
||||
case 'THREAD_UPDATE':
|
||||
case 'USER_UPDATE':
|
||||
case 'VOICE_STATE_UPDATE':
|
||||
case 'STAGE_INSTANCE_UPDATE':
|
||||
case 'GUILD_STICKERS_UPDATE':
|
||||
await this.events?.execute(packet.t, packet, this as Client<true>, shardId);
|
||||
await this.cache.onPacket(packet);
|
||||
break;
|
||||
//rest of the events
|
||||
default: {
|
||||
|
@ -52,7 +52,7 @@ export class WorkerClient<Ready extends boolean = boolean> extends BaseClient {
|
||||
|
||||
shards = new Map<number, Shard>();
|
||||
|
||||
declare options: WorkerClientOptions | undefined;
|
||||
declare options: WorkerClientOptions;
|
||||
|
||||
constructor(options?: WorkerClientOptions) {
|
||||
super(options);
|
||||
@ -326,15 +326,23 @@ export class WorkerClient<Ready extends boolean = boolean> extends BaseClient {
|
||||
switch (packet.t) {
|
||||
case 'GUILD_MEMBER_UPDATE':
|
||||
case 'PRESENCE_UPDATE':
|
||||
|
||||
case 'MESSAGE_UPDATE':
|
||||
case 'MESSAGE_DELETE_BULK':
|
||||
case 'MESSAGE_DELETE':
|
||||
await this.events?.execute(packet.t, packet, this as WorkerClient<true>, shardId);
|
||||
await this.cache.onPacket(packet);
|
||||
break;
|
||||
case 'GUILD_DELETE':
|
||||
case 'CHANNEL_UPDATE':
|
||||
case 'GUILD_EMOJIS_UPDATE':
|
||||
case 'GUILD_UPDATE':
|
||||
case 'GUILD_ROLE_UPDATE':
|
||||
case 'GUILD_ROLE_DELETE':
|
||||
case 'THREAD_UPDATE':
|
||||
case 'USER_UPDATE':
|
||||
case 'VOICE_STATE_UPDATE':
|
||||
case 'STAGE_INSTANCE_UPDATE':
|
||||
case 'GUILD_STICKERS_UPDATE':
|
||||
await this.events?.execute(packet.t, packet, this as WorkerClient<true>, shardId);
|
||||
await this.cache.onPacket(packet);
|
||||
break;
|
||||
//rest of the events
|
||||
default:
|
||||
|
@ -38,11 +38,6 @@ export class EventHandler extends BaseHandler {
|
||||
|
||||
async execute(name: GatewayEvents, ...args: [GatewayDispatchPayload, Client<true> | WorkerClient<true>, number]) {
|
||||
switch (name) {
|
||||
case 'GUILD_DELETE':
|
||||
case 'CHANNEL_UPDATE':
|
||||
await this.runEvent(args[0].t, args[1], args[0], args[2]);
|
||||
await args[1].cache.onPacket(args[0]);
|
||||
return;
|
||||
case 'MESSAGE_CREATE':
|
||||
{
|
||||
const { d: data } = args[0] as GatewayMessageCreateDispatch;
|
||||
|
@ -118,12 +118,15 @@ export const GUILD_ROLE_CREATE = (self: BaseClient, data: GatewayGuildRoleCreate
|
||||
return new GuildRole(self, data.role, data.guild_id);
|
||||
};
|
||||
|
||||
export const GUILD_ROLE_DELETE = (_self: BaseClient, data: GatewayGuildRoleDeleteDispatchData) => {
|
||||
return toCamelCase(data);
|
||||
export const GUILD_ROLE_DELETE = async (self: BaseClient, data: GatewayGuildRoleDeleteDispatchData) => {
|
||||
return (await self.cache.roles?.get(data.role_id)) || toCamelCase(data);
|
||||
};
|
||||
|
||||
export const GUILD_ROLE_UPDATE = (self: BaseClient, data: GatewayGuildRoleUpdateDispatchData) => {
|
||||
return new GuildRole(self, data.role, data.guild_id);
|
||||
export const GUILD_ROLE_UPDATE = async (
|
||||
self: BaseClient,
|
||||
data: GatewayGuildRoleUpdateDispatchData,
|
||||
): Promise<[role: GuildRole, old?: GuildRole]> => {
|
||||
return [new GuildRole(self, data.role, data.guild_id), await self.cache.roles?.get(data.role.id)];
|
||||
};
|
||||
|
||||
export const GUILD_STICKERS_UPDATE = (self: BaseClient, data: GatewayGuildStickersUpdateDispatchData) => {
|
||||
@ -133,6 +136,9 @@ export const GUILD_STICKERS_UPDATE = (self: BaseClient, data: GatewayGuildSticke
|
||||
};
|
||||
};
|
||||
|
||||
export const GUILD_UPDATE = (self: BaseClient, data: GatewayGuildUpdateDispatchData) => {
|
||||
return new Guild(self, data);
|
||||
export const GUILD_UPDATE = async (
|
||||
self: BaseClient,
|
||||
data: GatewayGuildUpdateDispatchData,
|
||||
): Promise<[guild: Guild, old?: Guild<'cached'>]> => {
|
||||
return [new Guild(self, data), await self.cache.guilds?.get(data.id)];
|
||||
};
|
||||
|
@ -53,14 +53,14 @@ export const MESSAGE_UPDATE = async (
|
||||
data: GatewayMessageUpdateDispatchData,
|
||||
): Promise<
|
||||
[
|
||||
undefined | Message,
|
||||
MakeRequired<
|
||||
message: MakeRequired<
|
||||
PartialClass<Message>,
|
||||
'id' | 'channelId' | 'createdAt' | 'createdTimestamp' | 'rest' | 'cache' | 'api' | 'client'
|
||||
>,
|
||||
old: undefined | Message,
|
||||
]
|
||||
> => {
|
||||
return [await self.cache.messages?.get(data.id), new Message(self, data as APIMessage)];
|
||||
return [new Message(self, data as APIMessage), await self.cache.messages?.get(data.id)];
|
||||
};
|
||||
|
||||
export const MESSAGE_POLL_VOTE_ADD = (_: BaseClient, data: GatewayMessagePollVoteDispatchData) => {
|
||||
|
@ -3,6 +3,6 @@ import type { GatewayPresenceUpdateDispatchData } from 'discord-api-types/v10';
|
||||
import type { BaseClient } from '../../client/base';
|
||||
import { toCamelCase } from '../../common';
|
||||
|
||||
export const PRESENCE_UPDATE = (_self: BaseClient, data: GatewayPresenceUpdateDispatchData) => {
|
||||
return toCamelCase(data);
|
||||
export const PRESENCE_UPDATE = async (self: BaseClient, data: GatewayPresenceUpdateDispatchData) => {
|
||||
return [toCamelCase(data), await self.cache.presences?.get(data.user.id)];
|
||||
};
|
||||
|
@ -1,10 +1,12 @@
|
||||
import type {
|
||||
GatewayStageInstanceCreateDispatchData,
|
||||
GatewayStageInstanceDeleteDispatchData,
|
||||
GatewayStageInstanceUpdateDispatchData,
|
||||
} from 'discord-api-types/v10';
|
||||
|
||||
import type { BaseClient } from '../../client/base';
|
||||
import { toCamelCase } from '../../common';
|
||||
import { type ObjectToLower, toCamelCase } from '../../common';
|
||||
import type { StageInstances } from '../../cache/resources/stage-instances';
|
||||
|
||||
export const STAGE_INSTANCE_CREATE = (_self: BaseClient, data: GatewayStageInstanceCreateDispatchData) => {
|
||||
return toCamelCase(data);
|
||||
@ -14,6 +16,9 @@ export const STAGE_INSTANCE_DELETE = (_self: BaseClient, data: GatewayStageInsta
|
||||
return toCamelCase(data);
|
||||
};
|
||||
|
||||
export const STAGE_INSTANCE_UPDATE = (_self: BaseClient, data: GatewayStageInstanceDeleteDispatchData) => {
|
||||
return toCamelCase(data);
|
||||
export const STAGE_INSTANCE_UPDATE = async (
|
||||
self: BaseClient,
|
||||
data: GatewayStageInstanceUpdateDispatchData,
|
||||
): Promise<[stage: ObjectToLower<GatewayStageInstanceUpdateDispatchData>, old?: ReturnType<StageInstances['get']>]> => {
|
||||
return [toCamelCase(data), await self.cache.stageInstances?.get(data.id)];
|
||||
};
|
||||
|
@ -30,6 +30,9 @@ export const THREAD_MEMBERS_UPDATE = (_self: BaseClient, data: GatewayThreadMemb
|
||||
return toCamelCase(data);
|
||||
};
|
||||
|
||||
export const THREAD_UPDATE = (self: BaseClient, data: GatewayThreadUpdateDispatchData) => {
|
||||
return new ThreadChannel(self, data);
|
||||
export const THREAD_UPDATE = async (
|
||||
self: BaseClient,
|
||||
data: GatewayThreadUpdateDispatchData,
|
||||
): Promise<[thread: ThreadChannel, old?: ThreadChannel]> => {
|
||||
return [new ThreadChannel(self, data), await self.cache.threads?.get(data.id)];
|
||||
};
|
||||
|
@ -2,6 +2,9 @@ import type { GatewayUserUpdateDispatchData } from 'discord-api-types/v10';
|
||||
import type { BaseClient } from '../../client/base';
|
||||
import { User } from '../../structures';
|
||||
|
||||
export const USER_UPDATE = (self: BaseClient, data: GatewayUserUpdateDispatchData) => {
|
||||
return new User(self, data);
|
||||
export const USER_UPDATE = async (
|
||||
self: BaseClient,
|
||||
data: GatewayUserUpdateDispatchData,
|
||||
): Promise<[user: User, old?: User]> => {
|
||||
return [new User(self, data), await self.cache.users?.get(data.id)];
|
||||
};
|
||||
|
@ -1,17 +1,16 @@
|
||||
import type { GatewayVoiceServerUpdateDispatchData, GatewayVoiceStateUpdateDispatchData } from 'discord-api-types/v10';
|
||||
import type { GatewayVoiceServerUpdateDispatchData, GatewayVoiceStateUpdateDispatchData } from '../../types';
|
||||
import type { BaseClient } from '../../client/base';
|
||||
import { toCamelCase } from '../../common';
|
||||
import { GuildMember } from '../../structures';
|
||||
import { VoiceState } from '../../structures';
|
||||
|
||||
export const VOICE_SERVER_UPDATE = (_self: BaseClient, data: GatewayVoiceServerUpdateDispatchData) => {
|
||||
return toCamelCase(data);
|
||||
};
|
||||
|
||||
export const VOICE_STATE_UPDATE = (self: BaseClient, data: GatewayVoiceStateUpdateDispatchData) => {
|
||||
return data.member?.user
|
||||
? {
|
||||
...toCamelCase(data),
|
||||
member: new GuildMember(self, data.member, data.member?.user, data.guild_id!),
|
||||
}
|
||||
: toCamelCase(data);
|
||||
export const VOICE_STATE_UPDATE = async (
|
||||
self: BaseClient,
|
||||
data: GatewayVoiceStateUpdateDispatchData,
|
||||
): Promise<[VoiceState] | [state: VoiceState, old?: VoiceState]> => {
|
||||
if (!data.guild_id) return [new VoiceState(self, data)];
|
||||
return [new VoiceState(self, data), await self.cache.voiceStates?.get(data.user_id, data.guild_id)];
|
||||
};
|
||||
|
@ -86,7 +86,7 @@ export const config = {
|
||||
port: 8080,
|
||||
...data,
|
||||
} as InternalRuntimeConfigHTTP;
|
||||
if (isCloudfareWorker()) BaseClient.seyfertConfig = obj;
|
||||
if (isCloudfareWorker()) BaseClient._seyferHttpConfig = obj;
|
||||
return obj;
|
||||
},
|
||||
};
|
||||
|
@ -1,18 +1,18 @@
|
||||
import type { GuildMember, UsingClient } from '../';
|
||||
import { GuildMember, type UsingClient } from '../';
|
||||
import type { VoiceStateResource } from '../cache/resources/voice-states';
|
||||
import type { ObjectToLower } from '../common';
|
||||
import type { GatewayVoiceState } from '../types';
|
||||
import { Base } from './extra/Base';
|
||||
|
||||
export interface VoiceState extends Base, ObjectToLower<VoiceStateResource> {}
|
||||
export interface VoiceState extends Base, ObjectToLower<Omit<VoiceStateResource, 'member'>> {}
|
||||
|
||||
export class VoiceState extends Base {
|
||||
constructor(
|
||||
client: UsingClient,
|
||||
data: VoiceStateResource,
|
||||
private withMember?: GuildMember,
|
||||
) {
|
||||
protected withMember?: GuildMember;
|
||||
constructor(client: UsingClient, data: GatewayVoiceState) {
|
||||
super(client);
|
||||
this.__patchThis(data);
|
||||
const { member, ...rest } = data;
|
||||
this.__patchThis(rest);
|
||||
if (member?.user && data.guild_id) this.withMember = new GuildMember(client, member, member.user, data.guild_id);
|
||||
}
|
||||
|
||||
isMuted() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user