mirror of
https://github.com/tiramisulabs/seyfert.git
synced 2025-07-01 20:46:08 +00:00
fix: only edit when deferred (#276)
* fix: only edit when deferred * fix: internal type
This commit is contained in:
parent
4dd69aeb14
commit
4a0a9ae130
@ -19,7 +19,12 @@ import type { CommandMetadata, ExtendContext, GlobalMetadata, UsingClient } from
|
|||||||
|
|
||||||
export interface CommandContext<T extends OptionsRecord = {}, M extends keyof RegisteredMiddlewares = never>
|
export interface CommandContext<T extends OptionsRecord = {}, M extends keyof RegisteredMiddlewares = never>
|
||||||
extends BaseContext,
|
extends BaseContext,
|
||||||
ExtendContext {}
|
ExtendContext {
|
||||||
|
/**@internal */
|
||||||
|
__edited?: true;
|
||||||
|
/**@internal */
|
||||||
|
__deferred?: true;
|
||||||
|
}
|
||||||
|
|
||||||
export class CommandContext<
|
export class CommandContext<
|
||||||
T extends OptionsRecord = {},
|
T extends OptionsRecord = {},
|
||||||
@ -89,6 +94,7 @@ export class CommandContext<
|
|||||||
> {
|
> {
|
||||||
if (this.interaction)
|
if (this.interaction)
|
||||||
return this.interaction.deferReply(ephemeral ? MessageFlags.Ephemeral : undefined, withResponse);
|
return this.interaction.deferReply(ephemeral ? MessageFlags.Ephemeral : undefined, withResponse);
|
||||||
|
this.__deferred = true;
|
||||||
const options = (this.client as Client | WorkerClient).options?.commands;
|
const options = (this.client as Client | WorkerClient).options?.commands;
|
||||||
return (this.messageResponse = await (this.message! as Message)[options?.reply?.(this) ? 'reply' : 'write'](
|
return (this.messageResponse = await (this.message! as Message)[options?.reply?.(this) ? 'reply' : 'write'](
|
||||||
options?.deferReplyResponse?.(this) ?? { content: 'Thinking...' },
|
options?.deferReplyResponse?.(this) ?? { content: 'Thinking...' },
|
||||||
@ -99,7 +105,11 @@ export class CommandContext<
|
|||||||
body: InteractionMessageUpdateBodyRequest,
|
body: InteractionMessageUpdateBodyRequest,
|
||||||
): Promise<When<InferWithPrefix, WebhookMessageStructure | MessageStructure, WebhookMessageStructure>> {
|
): Promise<When<InferWithPrefix, WebhookMessageStructure | MessageStructure, WebhookMessageStructure>> {
|
||||||
if (this.interaction) return this.interaction.editResponse(body);
|
if (this.interaction) return this.interaction.editResponse(body);
|
||||||
body.content ??= '';
|
if (this.__deferred && !this.__edited) {
|
||||||
|
this.__edited = true;
|
||||||
|
if (this.messageResponse?.content) body.content ??= '';
|
||||||
|
if (this.messageResponse?.embeds.length) body.embeds ??= [];
|
||||||
|
}
|
||||||
return (this.messageResponse = await this.messageResponse!.edit(body)) as never;
|
return (this.messageResponse = await this.messageResponse!.edit(body)) as never;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,10 +101,6 @@ export class WorkerManager extends Map<
|
|||||||
return this.options.shardsPerWorker;
|
return this.options.shardsPerWorker;
|
||||||
}
|
}
|
||||||
|
|
||||||
get workers() {
|
|
||||||
return this.options.workers;
|
|
||||||
}
|
|
||||||
|
|
||||||
async syncLatency({
|
async syncLatency({
|
||||||
shardId,
|
shardId,
|
||||||
workerId,
|
workerId,
|
||||||
@ -130,7 +126,7 @@ export class WorkerManager extends Map<
|
|||||||
|
|
||||||
calculateWorkerId(shardId: number) {
|
calculateWorkerId(shardId: number) {
|
||||||
const workerId = Math.floor((shardId - this.shardStart) / this.shardsPerWorker);
|
const workerId = Math.floor((shardId - this.shardStart) / this.shardsPerWorker);
|
||||||
if (workerId >= this.workers) {
|
if (workerId >= this.totalWorkers) {
|
||||||
throw new Error('Invalid shardId');
|
throw new Error('Invalid shardId');
|
||||||
}
|
}
|
||||||
return workerId;
|
return workerId;
|
||||||
@ -268,6 +264,7 @@ export class WorkerManager extends Map<
|
|||||||
if ([...this.values()].every(w => w.disconnected)) {
|
if ([...this.values()].every(w => w.disconnected)) {
|
||||||
this.options.totalShards = this._info!.shards;
|
this.options.totalShards = this._info!.shards;
|
||||||
this.options.shardEnd = this.options.totalShards = this._info!.shards;
|
this.options.shardEnd = this.options.totalShards = this._info!.shards;
|
||||||
|
this.options.workers = this.size;
|
||||||
delete this._info;
|
delete this._info;
|
||||||
for (const [id] of this.entries()) {
|
for (const [id] of this.entries()) {
|
||||||
this.postMessage(id, {
|
this.postMessage(id, {
|
||||||
@ -529,7 +526,7 @@ export class WorkerManager extends Map<
|
|||||||
name: '[WorkerManager]',
|
name: '[WorkerManager]',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (this.totalShards / this.shardsPerWorker > this.workers) {
|
if (this.totalShards / this.shardsPerWorker > this.totalWorkers) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`Cannot create enough shards in the specified workers, minimum: ${Math.ceil(
|
`Cannot create enough shards in the specified workers, minimum: ${Math.ceil(
|
||||||
this.totalShards / this.shardsPerWorker,
|
this.totalShards / this.shardsPerWorker,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user