fixes bugs and remaining ts errors

This commit is contained in:
Skillz4Killz
2021-10-28 16:44:06 +00:00
committed by GitHub
parent b481be2946
commit 468ce033e1
23 changed files with 103 additions and 41 deletions
+10 -7
View File
@@ -313,6 +313,7 @@ import { urlToBase64 } from "./util/url_to_base64.ts";
import { transformAttachment } from "./transformers/attachment.ts";
import { transformEmbed } from "./transformers/embed.ts";
import { transformComponent } from "./transformers/component.ts";
import { transformThread } from "./transformers/thread.ts";
export function createBot(options: CreateBotOptions) {
return {
@@ -345,7 +346,7 @@ export function createBot(options: CreateBotOptions) {
fetchAllMembersProcessingRequests: new Collection<string, Function>(),
messages: {
get: async function (id: bigint): Promise<DiscordenoMessage | undefined> {
return {} as any as DiscordenoMessage;
return;
},
has: async function (id: bigint): Promise<boolean> {
return false;
@@ -359,7 +360,7 @@ export function createBot(options: CreateBotOptions) {
},
guilds: {
get: async function (id: bigint): Promise<DiscordenoGuild | undefined> {
return {} as any as DiscordenoGuild;
return;
},
has: async function (id: bigint): Promise<boolean> {
return false;
@@ -376,7 +377,7 @@ export function createBot(options: CreateBotOptions) {
},
channels: {
get: async function (id: bigint): Promise<DiscordenoChannel | undefined> {
return {} as any as DiscordenoChannel;
return;
},
has: async function (id: bigint): Promise<boolean> {
return false;
@@ -390,7 +391,7 @@ export function createBot(options: CreateBotOptions) {
},
members: {
get: async function (id: bigint): Promise<DiscordenoMember | undefined> {
return {} as any as DiscordenoMember;
return;
},
has: async function (id: bigint): Promise<boolean> {
return false;
@@ -404,7 +405,7 @@ export function createBot(options: CreateBotOptions) {
},
presence: {
get: async function (id: bigint): Promise<DiscordenoPresence | undefined> {
return {} as any as DiscordenoPresence;
return;
},
has: async function (id: bigint): Promise<boolean> {
return false;
@@ -418,7 +419,7 @@ export function createBot(options: CreateBotOptions) {
},
users: {
get: async function (id: bigint): Promise<DiscordenoUser | undefined> {
return {} as any as DiscordenoUser;
return;
},
has: async function (id: bigint): Promise<boolean> {
return false;
@@ -570,7 +571,7 @@ export async function startBot(bot: Bot) {
bot.helpers = createHelpers(bot.helpers || {});
// START REST
bot.rest = createRestManager({ token: bot.token });
bot.rest = createRestManager({ token: bot.token, debug: bot.events.debug });
if (!bot.botGatewayData) bot.botGatewayData = await bot.helpers.getGatewayBot(bot);
// START WS
@@ -1102,6 +1103,7 @@ export interface Transformers {
attachment: typeof transformAttachment;
embed: typeof transformEmbed;
component: typeof transformComponent;
thread: typeof transformThread;
}
export function createTransformers(options: Partial<Transformers>) {
@@ -1123,6 +1125,7 @@ export function createTransformers(options: Partial<Transformers>) {
role: options.role || transformRole,
user: options.user || transformUser,
team: options.team || transformTeam,
thread: options.thread || transformThread,
voiceState: options.voiceState || transformVoiceState,
snowflake: options.snowflake || snowflakeToBigint,
};
+1 -1
View File
@@ -9,7 +9,7 @@ export async function handleGuildMembersChunk(bot: Bot, data: DiscordGatewayPayl
const guildId = bot.transformers.snowflake(payload.guild_id);
await bot.cache.execute("GUILD_MEMBER_CHUNK", {
members: payload.members.map((m) => bot.transformers.member(bot, m, guildId)),
members: payload.members.map((m) => bot.transformers.member(bot, m, guildId, bot.transformers.snowflake(m.user.id))),
users: payload.members.map((m) => bot.transformers.user(bot, m.user)),
});
+1 -1
View File
@@ -6,8 +6,8 @@ import { SnakeCasedPropertiesDeep } from "../../types/util.ts";
export async function handleGuildMemberAdd(bot: Bot, data: DiscordGatewayPayload) {
const payload = data.d as SnakeCasedPropertiesDeep<GuildMemberAdd>;
const guildId = bot.transformers.snowflake(payload.guild_id);
const member = bot.transformers.member(bot, payload, guildId);
const user = bot.transformers.user(bot, payload.user);
const member = bot.transformers.member(bot, payload, guildId, user.id);
await Promise.all([
bot.cache.members.set(member.id, member),
+3 -5
View File
@@ -6,12 +6,10 @@ import { SnakeCasedPropertiesDeep } from "../../types/util.ts";
export async function handleGuildMemberUpdate(bot: Bot, data: DiscordGatewayPayload) {
const payload = data.d as SnakeCasedPropertiesDeep<GuildMemberUpdate>;
// TODO: IDK IF THIS IS BUT IS IT LURKER IN STAGE CHANNEL WHO ISN'T A MEMBER
if (!payload.joined_at) return;
const user = bot.transformers.user(bot, payload.user);
bot.events.guildMemberUpdate(
bot,
bot.transformers.member(bot, payload, bot.transformers.snowflake(payload.guild_id)),
bot.transformers.user(bot, payload.user)
bot.transformers.member(bot, payload, bot.transformers.snowflake(payload.guild_id), user.id),
user
);
}
+5 -1
View File
@@ -10,6 +10,10 @@ export async function handleMessageDeleteBulk(bot: Bot, data: DiscordGatewayPayl
const messages = await bot.cache.execute("BULK_DELETE_MESSAGES", { messageIds: ids });
ids.forEach((id) => {
// @ts-ignore let itoh fix cache typings hes the king of typigns and cache
const msg = messages.find((m) => m.id === id);
const message = msg ? bot.transformers.message(bot, msg) : undefined;
bot.events.messageDelete(
bot,
{
@@ -17,7 +21,7 @@ export async function handleMessageDeleteBulk(bot: Bot, data: DiscordGatewayPayl
channelId: bot.transformers.snowflake(payload.channel_id),
guildId: payload.guild_id ? bot.transformers.snowflake(payload.guild_id) : undefined,
},
messages.find((m) => m.id === id)
message
);
});
}
@@ -7,12 +7,13 @@ export async function handleMessageReactionAdd(bot: Bot, data: DiscordGatewayPay
const payload = data.d as SnakeCasedPropertiesDeep<MessageReactionAdd>;
const guildId = payload.guild_id ? bot.transformers.snowflake(payload.guild_id) : undefined;
const userId = bot.transformers.snowflake(payload.user_id)
bot.events.reactionAdd(bot, {
userId: bot.transformers.snowflake(payload.user_id),
userId,
channelId: bot.transformers.snowflake(payload.channel_id),
messageId: bot.transformers.snowflake(payload.message_id),
guildId,
member: payload.member && guildId ? bot.transformers.member(bot, payload.member, guildId) : undefined,
member: payload.member && guildId ? bot.transformers.member(bot, payload.member, guildId, userId) : undefined,
emoji: bot.transformers.emoji(bot, payload.emoji),
});
}
+3 -2
View File
@@ -7,12 +7,13 @@ export function handleTypingStart(bot: Bot, data: DiscordGatewayPayload) {
const payload = data.d as SnakeCasedPropertiesDeep<TypingStart>;
const guildId = payload.guild_id ? bot.transformers.snowflake(payload.guild_id) : undefined;
const userId = bot.transformers.snowflake(payload.user_id)
bot.events.typingStart(bot, {
guildId,
channelId: bot.transformers.snowflake(payload.channel_id),
userId: bot.transformers.snowflake(payload.user_id),
userId,
timestamp: payload.timestamp,
member: payload.member && guildId ? bot.transformers.member(bot, payload.member, guildId) : undefined,
member: payload.member && guildId ? bot.transformers.member(bot, payload.member, guildId, userId) : undefined,
});
}
+1 -1
View File
@@ -16,8 +16,8 @@ export async function handleVoiceStateUpdate(bot: Bot, data: DiscordGatewayPaylo
await bot.cache.guilds.set(guild.id, guild);
}
const member = payload.member ? bot.transformers.member(bot, payload.member, guildId) : undefined;
const user = payload.member ? bot.transformers.user(bot, payload.member.user) : undefined;
const member = payload.member ? bot.transformers.member(bot, payload.member, guildId, user!.id) : undefined;
bot.events.voiceStateUpdate(bot, voiceState, { guild, member, user });
}
+1 -1
View File
@@ -56,5 +56,5 @@ export async function editMember(bot: Bot, guildId: bigint, memberId: bigint, op
}
);
return bot.transformers.member(bot, result, guildId);
return bot.transformers.member(bot, result, guildId, memberId);
}
+1 -1
View File
@@ -16,7 +16,7 @@ export async function getMember(bot: Bot, guildId: bigint, id: bigint, options?:
bot.constants.endpoints.GUILD_MEMBER(guildId, id)
);
const discordenoMember = await bot.transformers.member(bot, data, guildId);
const discordenoMember = bot.transformers.member(bot, data, guildId, id);
await bot.cache.members.set(discordenoMember.id, discordenoMember);
return discordenoMember;
+1 -1
View File
@@ -46,7 +46,7 @@ export async function getMembers(bot: Bot, guildId: bigint, options?: ListGuildM
const discordenoMembers = await Promise.all(
result.map(async (member) => {
const discordenoMember = bot.transformers.member(bot, member, guildId);
const discordenoMember = bot.transformers.member(bot, member, guildId, bot.transformers.snowflake(member.user.id));
if (options?.addToCache !== false) {
await bot.cache.members.set(discordenoMember.id, discordenoMember);
+1 -1
View File
@@ -37,7 +37,7 @@ export async function searchMembers(
const members = await Promise.all(
result.map(async (member) => {
const discordenoMember = bot.transformers.member(bot, member, guildId);
const discordenoMember = bot.transformers.member(bot, member, guildId, bot.transformers.snowflake(member.user.id));
if (options?.cache) {
await bot.cache.members.set(discordenoMember.id, discordenoMember);
}
+1 -1
View File
@@ -130,5 +130,5 @@ export async function processGlobalQueue(rest: RestManager) {
}
// ALLOW OTHER QUEUES TO START WHEN NEW REQUEST IS MADE
rest.globalQueueProcessing = true;
rest.globalQueueProcessing = false;
}
+1
View File
@@ -23,6 +23,7 @@ export function transformApplication(bot: Bot, payload: SnakeCasedPropertiesDeep
id: bot.transformers.snowflake(payload.id),
icon: payload.icon ? bot.utils.iconHashToBigInt(payload.icon) : undefined,
// @ts-ignore the partial here wont break anything
owner: payload.owner ? bot.transformers.user(bot, payload.owner) : undefined,
team: payload.team ? bot.transformers.team(bot, payload.team) : undefined,
guildId: payload.guild_id ? bot.transformers.snowflake(payload.guild_id) : undefined,
+1 -1
View File
@@ -141,5 +141,5 @@ export interface DiscordenoComponent {
/** The maximum number of items that can be selected. Default 1. Between 1-25. */
maxValues?: number;
/** a list of child components */
components?: Component[];
components?: DiscordenoComponent[];
}
+4 -3
View File
@@ -1,11 +1,12 @@
import { Bot } from "../bot.ts";
import { Interaction, Role } from "../types/mod.ts";
import { Interaction } 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;
const user = bot.transformers.user(bot, payload.member?.user || payload.user!);
return {
// UNTRANSFORMED STUFF HERE
@@ -15,12 +16,12 @@ export function transformInteraction(bot: Bot, payload: SnakeCasedPropertiesDeep
// TRANSFORMED STUFF BELOW
guildId,
user,
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,
member: payload.member && guildId ? bot.transformers.member(bot, payload.member, guildId, user.id) : undefined,
};
}
+1
View File
@@ -26,6 +26,7 @@ export function transformInvite(bot: Bot, invite: SnakeCasedPropertiesDeep<Invit
targetUser: invite.target_user ? bot.transformers.user(bot, invite.target_user) : undefined,
/** The embedded application to open for this voice channel embedded application invite */
targetApplication: invite.target_application
// @ts-ignore should not break anything even though its partial. if it does blame wolf :)
? bot.transformers.application(bot, invite.target_application)
: undefined,
/** Whether or not the invite is temporary (invited users will be kicked on disconnect unless they're assigned a role) */
+3 -3
View File
@@ -23,7 +23,7 @@ export interface DiscordenoUser {
export function transformUser(bot: Bot, payload: SnakeCasedPropertiesDeep<User>): DiscordenoUser {
return {
id: bot.transformers.snowflake(payload.id),
id: bot.transformers.snowflake(payload.id || ""),
username: payload.username,
discriminator: Number(payload.discriminator),
avatar: payload.avatar ? bot.utils.iconHashToBigInt(payload.avatar) : null,
@@ -75,9 +75,9 @@ export interface DiscordenoMember {
/** When this member began boosting this server if this member is boosting the server. */
premiumSince?: number;
/** Whether or not the member is deafened. */
deaf: boolean;
deaf?: boolean;
/** Whether or not the member is muted. */
mute: boolean;
mute?: boolean;
/** Whether or not this member is pending in server verification. */
pending?: boolean;
}
+3 -4
View File
@@ -9,10 +9,9 @@ import { DiscordenoEmbed } from "./embed.ts";
import { DiscordMessageTypes } from "../types/messages/message_types.ts";
import { DiscordMessageActivityTypes } from "../types/messages/message_activity_types.ts";
import { DiscordInteractionTypes } from "../types/interactions/interaction_types.ts";
import { DiscordMessageComponentTypes } from "../types/messages/components/message_component_types.ts";
import { ButtonStyles } from "../types/messages/components/button_styles.ts";
import { DiscordenoComponent } from "./component.ts";
import { Application } from "../types/applications/application.ts";
import { DiscordenoThread } from "./thread.ts";
export function transformMessage(bot: Bot, data: SnakeCasedPropertiesDeep<Message>): DiscordenoMessage {
const guildId = data.guild_id ? bot.transformers.snowflake(data.guild_id) : undefined;
@@ -54,7 +53,7 @@ export function transformMessage(bot: Bot, data: SnakeCasedPropertiesDeep<Messag
user: bot.transformers.user(bot, data.interaction.user),
}
: undefined,
thread: data.thread,
thread: data.thread ? bot.transformers.thread(bot, data.thread) : undefined,
components: data.components?.map((component) => bot.transformers.component(bot, component)),
stickerItems: data.sticker_items?.map((sticker) => ({
id: bot.transformers.snowflake(sticker.id),
@@ -196,7 +195,7 @@ export interface DiscordenoMessage {
user: DiscordenoUser;
};
/** The thread that was started from this message, includes thread member object */
thread?: Omit<Channel, "member"> & { member: ThreadMember };
thread?: DiscordenoThread;
/** The components related to this message */
components?: DiscordenoComponent[];
}
+48
View File
@@ -0,0 +1,48 @@
import { Bot } from "../bot.ts";
import { Channel } from "../types/channels/channel.ts";
import { DiscordChannelTypes } from "../types/channels/channel_types.ts";
import { SnakeCasedPropertiesDeep } from "../types/util.ts";
export function transformThread(bot: Bot, channel: SnakeCasedPropertiesDeep<Channel>): DiscordenoThread {
if (
channel.type !== DiscordChannelTypes.GuildNewsThread &&
channel.type !== DiscordChannelTypes.GuildPublicThread &&
channel.type !== DiscordChannelTypes.GuildPrivateThread
)
throw new Error("Cannot convert non-thread channel to a thread.");
return {
name: channel.name || "",
id: bot.transformers.snowflake(channel.id),
type: channel.type,
parentId: bot.transformers.snowflake(channel.parent_id!),
memberCount: channel.member_count || 1,
messageCount: channel.message_count || 1,
archiveTimestamp: channel.thread_metadata?.archive_timestamp
? Date.parse(channel.thread_metadata.archive_timestamp)
: undefined,
autoArchiveDuration: channel.thread_metadata?.auto_archive_duration || 0,
ownerId: bot.transformers.snowflake(channel.owner_id!),
botIsMember: Boolean(channel.member),
archived: channel.thread_metadata?.archived,
locked: channel.thread_metadata?.locked,
};
}
export interface DiscordenoThread {
id: bigint;
name: string;
type:
| DiscordChannelTypes.GuildNewsThread
| DiscordChannelTypes.GuildPublicThread
| DiscordChannelTypes.GuildPrivateThread;
parentId: bigint;
memberCount: number;
messageCount: number;
archiveTimestamp?: number;
autoArchiveDuration: number;
archived?: boolean;
locked?: boolean;
ownerId: bigint;
botIsMember: boolean;
}
+2 -2
View File
@@ -13,9 +13,9 @@ export interface GuildMember {
/** When the user started boosing the guild */
premiumSince?: string | null;
/** Whether the user is deafened in voice channels */
deaf: boolean;
deaf?: boolean;
/** Whether the user is muted in voice channels */
mute: boolean;
mute?: boolean;
/** Whether the user has not yet passed the guild's Membership Screening requirements */
pending?: boolean;
}
+1 -1
View File
@@ -11,7 +11,7 @@ export interface GuildMemberUpdate {
/** Nickname of the user in the guild */
nick?: string | null;
/** When the user joined the guild */
joinedAt: string | null;
joinedAt: string;
/** When the user starting boosting the guild */
premiumSince?: string | null;
/** Whether the user has not yet passed the guild's Membership Screening requirements */
+6 -1
View File
@@ -5,11 +5,16 @@ Deno.test("[Bot] - Starting Tests", async (t) => {
const bot = createBot({
token: TOKEN || Deno.env.get("DISCORD_TOKEN"),
botId: 675412054529540107n,
events: createEventHandlers({}),
events: createEventHandlers({
debug: console.log,
}),
intents: [],
}) as Bot;
await startBot(bot);
console.log("started");
const x = await bot.helpers.sendMessage(bot, 806947972004839444n, "testing");
console.log("x");
console.log("Bot online");