Fix conflict

This commit is contained in:
TriForMine
2021-10-21 22:16:27 +02:00
8 changed files with 186 additions and 78 deletions

View File

@@ -78,10 +78,20 @@ import { delay, validateComponents, validateSlashOptionChoices, validateSlashOpt
import { iconBigintToHash, iconHashToBigInt } from "./util/hash.ts";
import { calculateShardId } from "./util/calculate_shard_id.ts";
import {
handleReady,
handleChannelCreate,
handleChannelDelete,
handleChannelPinsUpdate,
handleChannelUpdate,
handleThreadCreate,
handleThreadUpdate,
handleThreadDelete,
handleThreadListSync,
handleThreadMemberUpdate,
handleThreadMembersUpdate,
handleStageInstanceCreate,
handleStageInstanceUpdate,
handleStageInstanceDelete,
handleGuildBanAdd,
handleGuildBanRemove,
handleGuildCreate,
@@ -90,44 +100,34 @@ import {
handleGuildIntegrationsUpdate,
handleGuildMemberAdd,
handleGuildMemberRemove,
handleGuildMembersChunk,
handleGuildMemberUpdate,
handleGuildMembersChunk,
handleGuildRoleCreate,
handleGuildRoleDelete,
handleGuildRoleUpdate,
handleGuildUpdate,
handleIntegrationCreate,
handleIntegrationDelete,
handleIntegrationUpdate,
handleInteractionCreate,
handleInviteCreate,
handleMessageCreate,
handleMessageDelete,
handleMessageDeleteBulk,
handleMessageDelete,
handleMessageReactionAdd,
handleMessageReactionRemove,
handleMessageReactionRemoveAll,
handleMessageReactionRemoveEmoji,
handleMessageReactionRemove,
handleMessageUpdate,
handlePresenceUpdate,
handleReady,
handleStageInstanceCreate,
handleStageInstanceDelete,
handleStageInstanceUpdate,
handleThreadCreate,
handleThreadDelete,
handleThreadListSync,
handleThreadMembersUpdate,
handleThreadMemberUpdate,
handleThreadUpdate,
handleTypingStart,
handleUserUpdate,
handleVoiceServerUpdate,
handleVoiceStateUpdate,
handleWebhooksUpdate,
handleIntegrationCreate,
handleIntegrationUpdate,
handleIntegrationDelete,
} from "./handlers/mod.ts";
import { handleGuildLoaded } from "./handlers/guilds/GUILD_LOADED_DD.ts";
import { Emoji } from "./types/emojis/emoji.ts";
import {Emoji} from "./types/emojis/emoji.ts";
import {handleGuildLoaded} from "./handlers/guilds/GUILD_LOADED_DD.ts";
export async function createBot(options: CreateBotOptions) {
return {

View File

@@ -1,7 +1,11 @@
import { eventHandlers } from "../../bot.ts";
import { Bot } from "../../bot.ts";
import type { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import type { IntegrationCreateUpdate } from "../../types/integrations/integration_create_update.ts";
import { SnakeCasedPropertiesDeep } from "../../types/util.ts";
export function handleIntegrationCreate(data: DiscordGatewayPayload) {
eventHandlers.integrationCreate?.(data.d as IntegrationCreateUpdate);
export function handleIntegrationCreate(bot: Bot, data: DiscordGatewayPayload) {
bot.events.integrationCreate(
bot,
bot.transformers.integration(bot, data.d as SnakeCasedPropertiesDeep<IntegrationCreateUpdate>)
);
}

View File

@@ -1,7 +1,14 @@
import { eventHandlers } from "../../bot.ts";
import { Bot } from "../../bot.ts";
import type { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import type { IntegrationDelete } from "../../types/integrations/integration_delete.ts";
import { SnakeCasedPropertiesDeep } from "../../types/util.ts";
export function handleIntegrationDelete(data: DiscordGatewayPayload) {
eventHandlers.integrationDelete?.(data.d as IntegrationDelete);
export function handleIntegrationDelete(bot: Bot, data: DiscordGatewayPayload) {
const payload = data.d as SnakeCasedPropertiesDeep<IntegrationDelete>;
bot.events.integrationDelete(bot, {
id: bot.transformers.snowflake(payload.id),
guildId: bot.transformers.snowflake(payload.guild_id),
applicationId: payload.application_id ? bot.transformers.snowflake(payload.application_id) : undefined,
});
}

View File

@@ -1,7 +1,11 @@
import { eventHandlers } from "../../bot.ts";
import { Bot } from "../../bot.ts";
import type { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import type { IntegrationCreateUpdate } from "../../types/integrations/integration_create_update.ts";
import { SnakeCasedPropertiesDeep } from "../../types/util.ts";
export function handleIntegrationUpdate(data: DiscordGatewayPayload) {
eventHandlers.integrationUpdate?.(data.d as IntegrationCreateUpdate);
export function handleIntegrationUpdate(bot: Bot, data: DiscordGatewayPayload) {
bot.events.integrationsUpdate(
bot,
bot.transformers.integration(bot, data.d as SnakeCasedPropertiesDeep<IntegrationCreateUpdate>)
);
}

View File

@@ -1,52 +1,8 @@
import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts";
import { createDiscordenoMessage, DiscordenoMessage } from "../../structures/message.ts";
import { structures } from "../../structures/mod.ts";
import { Bot } from "../../bot.ts";
import type { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import type { BigInteraction, Interaction } from "../../types/interactions/interaction.ts";
import type { GuildMemberWithUser } from "../../types/members/guild_member.ts";
import { snowflakeToBigint } from "../../util/bigint.ts";
import type { Interaction } from "../../types/interactions/interaction.ts";
import { SnakeCasedPropertiesDeep } from "../../types/util.ts";
export async function handleInteractionCreate(data: DiscordGatewayPayload) {
const basePayload = data.d as Interaction;
const payload = {
...basePayload,
id: snowflakeToBigint(basePayload.id),
applicationId: snowflakeToBigint(basePayload.applicationId),
guildId: basePayload.guildId ? snowflakeToBigint(basePayload.guildId) : undefined,
channelId: basePayload.channelId ? snowflakeToBigint(basePayload.channelId) : undefined,
member: basePayload.member
? {
...basePayload.member,
roles: basePayload.member.roles.map((id) => snowflakeToBigint(id)),
user: {
...basePayload.member.user,
id: snowflakeToBigint(basePayload.member.user.id),
},
}
: undefined,
user: basePayload.user
? {
...basePayload.user,
id: snowflakeToBigint(basePayload.user.id),
}
: undefined,
message: basePayload.message ? createDiscordenoMessage(basePayload.message) : undefined,
} as BigInteraction;
if (payload.member) payload.user = payload.member.user;
const discordenoMember = payload.guildId && basePayload.member
? await structures.createDiscordenoMember(basePayload.member, payload.guildId)
: undefined;
if (discordenoMember) {
await cacheHandlers.set("members", discordenoMember.id, discordenoMember);
eventHandlers.interactionGuildCreate?.(payload, discordenoMember);
} else {
eventHandlers.interactionDMCreate?.(payload);
}
eventHandlers.interactionCreate?.(payload, discordenoMember);
export async function handleInteractionCreate(bot: Bot, data: DiscordGatewayPayload) {
bot.events.interactionCreate(bot, bot.transformers.interaction(bot, data.d as SnakeCasedPropertiesDeep<Interaction>));
}

View File

@@ -0,0 +1,91 @@
import { Bot } from "../bot.ts";
import { IntegrationCreateUpdate } from "../types/integrations/integration_create_update.ts";
import { DiscordIntegrationExpireBehaviors } from "../types/mod.ts";
import { SnakeCasedPropertiesDeep } from "../types/util.ts";
import { DiscordenoUser } from "./member.ts";
export function transformIntegration(bot: Bot, payload: SnakeCasedPropertiesDeep<IntegrationCreateUpdate>) {
return {
guildId: bot.transformers.snowflake(payload.guild_id),
id: bot.transformers.snowflake(payload.id),
name: payload.name,
type: payload.type,
enabled: payload.enabled,
syncing: payload.syncing,
roleId: payload.role_id ? bot.transformers.snowflake(payload.role_id) : undefined,
enableEmoticons: payload.enable_emoticons,
expireBehavior: payload.expire_behavior,
expireGracePeriod: payload.expire_grace_period,
user: payload.user ? bot.transformers.user(bot, payload.user) : undefined,
account: {
id: bot.transformers.snowflake(payload.account.id),
name: payload.account.name,
},
syncedAt: payload.synced_at ? Date.parse(payload.synced_at) : undefined,
subscriberCount: payload.subscriber_count,
revoked: payload.revoked,
application: payload.application
? {
id: bot.transformers.snowflake(payload.application.id),
name: payload.application.name,
icon: payload.application.icon ? bot.utils.iconHashToBigInt(payload.application.icon) : undefined,
description: payload.application.description,
summary: payload.application.summary,
bot: payload.application.bot ? bot.transformers.user(bot, payload.application.bot) : undefined,
}
: undefined,
};
}
export interface DiscordenoIntegration {
/** The guild id for where this integration is location. */
guildId: bigint;
/** Integration Id */
id: bigint;
/** Integration name */
name: string;
/** Integration type (twitch, youtube or discord) */
type: "twitch" | "youtube" | "discord";
/** Is this integration enabled */
enabled: boolean;
/** Is this integration syncing */
syncing?: boolean;
/** Role Id that this integration uses for "subscribers" */
roleId?: bigint;
/** Whether emoticons should be synced for this integration (twitch only currently) */
enableEmoticons?: boolean;
/** The behavior of expiring subscribers */
expireBehavior?: DiscordIntegrationExpireBehaviors;
/** The grace period (in days) before expiring subscribers */
expireGracePeriod?: number;
/** User for this integration */
user?: DiscordenoUser;
/** Integration account information */
account: {
/** Id of the account */
id: bigint;
/** Name of the account */
name: string;
};
/** When this integration was last synced */
syncedAt?: number;
/** How many subscribers this integration has */
subscriberCount?: number;
/** Has this integration been revoked */
revoked?: boolean;
/** The bot/OAuth2 application for discord integrations */
application?: {
/** The id of the app */
id: bigint;
/** The name of the app */
name: string;
/** the icon hash of the app */
icon?: bigint;
/** The description of the app */
description: string;
/** The summary of the app */
summary: string;
/** The bot associated with this application */
bot?: DiscordenoUser;
};
}

View File

@@ -0,0 +1,43 @@
import { Bot } from "../bot.ts";
import { Interaction, Role } from "../types/mod.ts";
import { SnakeCasedPropertiesDeep } from "../types/util.ts";
import { DiscordenoMember, DiscordenoUser } from "./member.ts";
import { DiscordenoMessage } from "./message.ts";
export function transformInteraction(bot: Bot, payload: SnakeCasedPropertiesDeep<Interaction>): DiscordenoInteraction {
const guildId = payload.guild_id ? bot.transformers.snowflake(payload.guild_id) : undefined;
return {
// UNTRANSFORMED STUFF HERE
type: payload.type,
token: payload.token,
version: payload.version,
// TRANSFORMED STUFF BELOW
guildId,
id: bot.transformers.snowflake(payload.id),
applicationId: bot.transformers.snowflake(payload.application_id),
user: bot.transformers.user(bot, payload.member?.user || payload.user!),
message: payload.message ? bot.transformers.message(bot, payload.message) : undefined,
channelId: payload.channel_id ? bot.transformers.snowflake(payload.channel_id) : undefined,
member: payload.member && guildId ? bot.transformers.member(bot, payload.member, guildId) : undefined,
};
}
export interface DiscordenoInteraction
extends Omit<Interaction, "id" | "applicationId" | "guildId" | "channelId" | "member" | "user" | "message"> {
/** Id of the interaction */
id: bigint;
/** Id of the application this interaction is for */
applicationId: bigint;
/** The guild it was sent from */
guildId?: bigint;
/** The channel it was sent from */
channelId?: bigint;
/** Guild member data for the invoking user, including permissions */
member?: DiscordenoMember;
/** User object for the invoking user, if invoked in a DM */
user: DiscordenoUser;
/** For the message the button was attached to */
message?: DiscordenoMessage;
}

View File

@@ -3,7 +3,7 @@ import { Message } from "../types/messages/message.ts";
import { CHANNEL_MENTION_REGEX } from "../util/constants.ts";
import { SnakeCasedPropertiesDeep } from "../types/util.ts";
export function transformMessage(bot: Bot, data: SnakeCasedPropertiesDeep<Message>) {
export function transformMessage(bot: Bot, data: SnakeCasedPropertiesDeep<Message>): DiscordenoMessage {
return {
// UNTRANSFORMED STUFF HERE
content: data.content || "",
@@ -71,6 +71,9 @@ export interface DiscordenoMessage
| "author"
| "applicationId"
| "thread"
| "tts"
| "pinned"
| "mentionEveryone"
> {
id: bigint;
/** Whether or not this message was sent by a bot */
@@ -83,7 +86,7 @@ export interface DiscordenoMessage
// For better user experience
/** Id of the guild which the massage has been send in. "0n" if it a DM */
guildId: bigint;
guildId?: bigint;
/** id of the channel the message was sent in */
channelId: bigint;
/** If the message is generated by a webhook, this is the webhook's id */