mirror of
https://github.com/tiramisulabs/seyfert.git
synced 2025-07-01 20:46:08 +00:00
fix: Polls (#189)
* feat: add polls * fix: polls builder and send * fix: transformBody
This commit is contained in:
parent
f223eb1123
commit
a60bd19937
@ -21,7 +21,7 @@
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"chokidar": "^3.6.0",
|
||||
"discord-api-types": "^0.37.80",
|
||||
"discord-api-types": "^0.37.81",
|
||||
"magic-bytes.js": "^1.10.0",
|
||||
"ts-mixer": "^6.0.4",
|
||||
"ws": "^8.16.0"
|
||||
|
10
pnpm-lock.yaml
generated
10
pnpm-lock.yaml
generated
@ -12,8 +12,8 @@ importers:
|
||||
specifier: ^3.6.0
|
||||
version: 3.6.0
|
||||
discord-api-types:
|
||||
specifier: ^0.37.80
|
||||
version: 0.37.80
|
||||
specifier: ^0.37.81
|
||||
version: 0.37.81
|
||||
magic-bytes.js:
|
||||
specifier: ^1.10.0
|
||||
version: 1.10.0
|
||||
@ -362,8 +362,8 @@ packages:
|
||||
resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==}
|
||||
engines: {node: '>=0.10'}
|
||||
|
||||
discord-api-types@0.37.80:
|
||||
resolution: {integrity: sha512-aQTZn3C34TOyOmbr9499DgMINZGRmh5K2gT4lZv1/tUb3swPQ6iCthqMVmA5G8d38lTiCwoSyULYAMHifjHh1g==}
|
||||
discord-api-types@0.37.81:
|
||||
resolution: {integrity: sha512-GNUnmQeIO5S9lSDbH3hFCIbfhSO62BYtXEFVWMUsV2H7Xx/lCZIe53uQcYtfaO8nxO0kcqNkYgohrhqQMGxthg==}
|
||||
|
||||
dot-prop@5.3.0:
|
||||
resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==}
|
||||
@ -1191,7 +1191,7 @@ snapshots:
|
||||
denque@2.1.0:
|
||||
optional: true
|
||||
|
||||
discord-api-types@0.37.80: {}
|
||||
discord-api-types@0.37.81: {}
|
||||
|
||||
dot-prop@5.3.0:
|
||||
dependencies:
|
||||
|
@ -5,20 +5,20 @@ import { resolvePartialEmoji } from '../structures/extra/functions';
|
||||
|
||||
export class PollBuilder {
|
||||
constructor(
|
||||
public data: DeepPartial<Omit<RESTAPIPollCreate, 'answers'> & { answers: { media: APIPollMedia }[] }> = {},
|
||||
public data: DeepPartial<Omit<RESTAPIPollCreate, 'answers'> & { answers: { poll_media: APIPollMedia }[] }> = {},
|
||||
) {
|
||||
this.data.layout_type = PollLayoutType.Default;
|
||||
}
|
||||
|
||||
addAnswers(...answers: RestOrArray<PollMedia>) {
|
||||
this.data.answers = (this.data.answers ?? []).concat(
|
||||
answers.flat().map(x => ({ media: this.resolvedPollMedia(x) })),
|
||||
answers.flat().map(x => ({ poll_media: this.resolvedPollMedia(x) })),
|
||||
);
|
||||
return this;
|
||||
}
|
||||
|
||||
setAnswers(...answers: RestOrArray<PollMedia>) {
|
||||
this.data.answers = answers.flat().map(x => ({ media: this.resolvedPollMedia(x) }));
|
||||
this.data.answers = answers.flat().map(x => ({ poll_media: this.resolvedPollMedia(x) }));
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -40,6 +40,10 @@ export class PollBuilder {
|
||||
return this;
|
||||
}
|
||||
|
||||
toJSON(): RESTAPIPollCreate {
|
||||
return { ...this.data } as RESTAPIPollCreate;
|
||||
}
|
||||
|
||||
private resolvedPollMedia(data: PollMedia) {
|
||||
if (!data.emoji) return { text: data.text };
|
||||
const resolve = resolvePartialEmoji(data.emoji);
|
||||
|
@ -72,8 +72,8 @@ export type ComponentInteractionMessageUpdate = OmitInsert<
|
||||
|
||||
export type InteractionCreateBodyRequest = OmitInsert<
|
||||
APIInteractionResponseChannelMessageWithSource['data'],
|
||||
'components' | 'embeds',
|
||||
ResolverProps
|
||||
'components' | 'embeds' | 'poll',
|
||||
SendResolverProps
|
||||
>;
|
||||
|
||||
export type ModalCreateBodyRequest = APIModalInteractionResponse['data'] | Modal;
|
||||
|
@ -121,7 +121,8 @@ export class BaseInteraction<
|
||||
case InteractionResponseType.DeferredChannelMessageWithSource:
|
||||
return body;
|
||||
case InteractionResponseType.ChannelMessageWithSource:
|
||||
case InteractionResponseType.UpdateMessage:
|
||||
case InteractionResponseType.UpdateMessage: {
|
||||
const poll = (body as InteractionCreateBodyRequest).poll;
|
||||
return {
|
||||
type: body.type,
|
||||
//@ts-ignore
|
||||
@ -131,8 +132,10 @@ export class BaseInteraction<
|
||||
components: body.data?.components?.map(x => (x instanceof ActionRow ? x.toJSON() : x)) ?? undefined,
|
||||
embeds: body.data?.embeds?.map(x => (x instanceof Embed ? x.toJSON() : x)) ?? undefined,
|
||||
attachments: body.data?.attachments?.map((x, i) => ({ id: i, ...resolveAttachment(x) })) ?? undefined,
|
||||
poll: poll ? ('toJSON' in poll ? poll.toJSON() : poll) : undefined,
|
||||
},
|
||||
};
|
||||
}
|
||||
case InteractionResponseType.Modal:
|
||||
return {
|
||||
type: body.type,
|
||||
@ -162,10 +165,12 @@ export class BaseInteraction<
|
||||
| MessageCreateBodyRequest
|
||||
| MessageWebhookCreateBodyRequest,
|
||||
) {
|
||||
const poll = (body as MessageWebhookCreateBodyRequest).poll;
|
||||
return {
|
||||
...body,
|
||||
components: body.components?.map(x => (x instanceof ActionRow ? x.toJSON() : x)) ?? undefined,
|
||||
embeds: body?.embeds?.map(x => (x instanceof Embed ? x.toJSON() : x)) ?? undefined,
|
||||
poll: poll ? ('toJSON' in poll ? poll.toJSON() : poll) : undefined,
|
||||
// attachments: body.attachments?.map((x, i) => ({ id: i, ...resolveAttachment(x) })) ?? undefined,
|
||||
} as T;
|
||||
}
|
||||
|
@ -251,11 +251,13 @@ export class MessagesMethods extends DiscordBase {
|
||||
}
|
||||
|
||||
static transformMessageBody<T>(body: MessageCreateBodyRequest | MessageUpdateBodyRequest) {
|
||||
const poll = (body as MessageCreateBodyRequest).poll;
|
||||
return {
|
||||
...body,
|
||||
components: body.components?.map(x => ('toJSON' in x ? x.toJSON() : x)) ?? undefined,
|
||||
embeds: body.embeds?.map(x => (x instanceof Embed ? x.toJSON() : x)) ?? undefined,
|
||||
attachments: body.attachments?.map((x, i) => ({ id: i, ...resolveAttachment(x) })) ?? undefined,
|
||||
poll: poll ? ('toJSON' in poll ? poll.toJSON() : poll) : undefined,
|
||||
} as T;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user