chore: setup "deno lint" (#331)

* chore: setup "deno lint"

* ci(lint): add --unstable flat to lint script

* lint

* lint

* refactor: destructure assignment for Message#guildID

* chore: remove TODO comment

* refactor: remove redundant async

* chore: switch to Deno stable vscode ext

* chore: remove ignore comments

* chore: remove ignore comments

* chore: remove @ts-ignore comment

* fixes

* fixes

* chore: remove deno-lint-ignore comment

* chore: add index signature
This commit is contained in:
Ayyan
2021-01-03 20:12:42 +04:00
committed by GitHub
parent 55f68a242d
commit e5a8f3b358
33 changed files with 127 additions and 90 deletions
+2
View File
@@ -1,3 +1,5 @@
// deno-lint-ignore-file require-await no-explicit-any prefer-const
import { PresenceUpdatePayload } from "../../types/mod.ts";
import { cache } from "../../util/cache.ts";
import { Collection } from "../../util/collection.ts";
+1 -3
View File
@@ -83,7 +83,6 @@ export async function handleInternalGuildUpdate(data: DiscordPayload) {
.map(([key, value]) => {
if (keysToSkip.includes(key)) return;
// @ts-ignore
const cachedValue = cachedGuild[key];
if (cachedValue !== value) {
// Guild create sends undefined and update sends false.
@@ -91,13 +90,12 @@ export async function handleInternalGuildUpdate(data: DiscordPayload) {
if (Array.isArray(cachedValue) && Array.isArray(value)) {
const different = (cachedValue.length !== value.length) ||
// @ts-ignore no idea how to fix this
cachedValue.find((val) => !value.includes(val)) ||
value.find((val) => !cachedValue.includes(val));
if (!different) return;
}
// This will update the cached guild with the new values
// @ts-ignore
cachedGuild[key] = value;
return { key, oldValue: cachedValue, value };
}
+1 -1
View File
@@ -18,7 +18,7 @@ export async function handleInternalInteractionCreate(data: DiscordPayload) {
);
}
export async function handleInternalApplicationCommandCreate(
export function handleInternalApplicationCommandCreate(
data: DiscordPayload,
) {
if (data.t !== "APPLICATION_COMMAND_CREATE") return;
+2
View File
@@ -56,7 +56,9 @@ export async function handleInternalGuildMemberUpdate(data: DiscordPayload) {
const newMemberData = {
...payload,
// deno-lint-ignore camelcase
premium_since: payload.premium_since || undefined,
// deno-lint-ignore camelcase
joined_at: new Date(guildMember?.joinedAt || Date.now())
.toISOString(),
deaf: guildMember?.deaf || false,
+2 -5
View File
@@ -11,10 +11,8 @@ import {
import { cache } from "../../util/cache.ts";
import { delay } from "../../util/utils.ts";
import { allowNextShard } from "../../ws/shard_manager.ts";
import {
initialMemberLoadQueue,
structures,
} from "../structures/structures.ts";
import { initialMemberLoadQueue } from "../structures/guild.ts";
import { structures } from "../structures/mod.ts";
import { cacheHandlers } from "./cache.ts";
/** This function is the internal handler for the ready event. Users can override this with controllers if desired. */
@@ -75,7 +73,6 @@ export async function handleInternalUserUpdate(data: DiscordPayload) {
if (!member) return;
Object.entries(userData).forEach(([key, value]) => {
// @ts-ignore
if (member[key] !== value) return member[key] = value;
});
return eventHandlers.botUpdate?.(userData);
+4
View File
@@ -399,9 +399,13 @@ export async function editChannel(
const payload = {
...options,
// deno-lint-ignore camelcase
rate_limit_per_user: options.slowmode,
// deno-lint-ignore camelcase
parent_id: options.parentID,
// deno-lint-ignore camelcase
user_limit: options.userLimit,
// deno-lint-ignore camelcase
permission_overwrites: options.overwrites?.map(
(overwrite) => {
return {
+2 -2
View File
@@ -429,8 +429,8 @@ export function fetchMembers(guild: Guild, options?: FetchMembersOptions) {
options.limit = options.userIDs.length;
}
return new Promise(async (resolve) => {
await requestAllMembers(guild, resolve, options);
return new Promise((resolve) => {
requestAllMembers(guild, resolve, options);
}) as Promise<Collection<string, Member>>;
}
+4 -1
View File
@@ -1,6 +1,7 @@
import { botID } from "../../bot.ts";
import { RequestManager } from "../../rest/mod.ts";
import {
ChannelCreatePayload,
DMChannelCreatePayload,
EditMemberOptions,
Errors,
@@ -128,7 +129,9 @@ export async function sendDirectMessage(
) as DMChannelCreatePayload;
// Channel create event will have added this channel to the cache
await cacheHandlers.delete("channels", dmChannelData.id);
const channel = await structures.createChannel(dmChannelData);
const channel = await structures.createChannel(
dmChannelData as unknown as ChannelCreatePayload,
);
// Recreate the channel and add it undert he users id
await cacheHandlers.set("channels", memberID, channel);
dmChannel = channel;
+9 -9
View File
@@ -32,34 +32,34 @@ export async function createChannel(
guildID?: string,
) {
const {
guild_id: rawGuildID,
guild_id: rawGuildID = "",
last_message_id: lastMessageID,
user_limit: userLimit,
rate_limit_per_user: rateLimitPerUser,
parent_id: parentID,
parent_id: parentID = undefined,
last_pin_timestamp: lastPinTimestamp,
permission_overwrites,
nsfw,
permission_overwrites: permissionOverwrites = [],
nsfw = false,
...rest
} = data;
const restProps: Record<string, ReturnType<typeof createNewProp>> = {};
for (const key of Object.keys(rest)) {
restProps[key] = createNewProp((rest as any)[key]);
restProps[key] = createNewProp(rest[key]);
}
const channel = Object.create(baseChannel, {
...restProps,
guildID: createNewProp(guildID || rawGuildID || ""),
guildID: createNewProp(guildID || rawGuildID),
lastMessageID: createNewProp(lastMessageID),
userLimit: createNewProp(userLimit),
rateLimitPerUser: createNewProp(rateLimitPerUser),
parentID: createNewProp(parentID || undefined),
parentID: createNewProp(parentID),
lastPinTimestamp: createNewProp(
lastPinTimestamp ? Date.parse(lastPinTimestamp) : undefined,
),
permissionOverwrites: createNewProp(permission_overwrites || []),
nsfw: createNewProp(data.nsfw || false),
permissionOverwrites: createNewProp(permissionOverwrites),
nsfw: createNewProp(nsfw),
});
await cacheHandlers.set("channels", data.id, channel);
+8 -5
View File
@@ -13,6 +13,7 @@ import {
MemberCreatePayload,
Presence,
RoleData,
ValueOf,
VoiceState,
} from "../../types/mod.ts";
import { cache } from "../../util/cache.ts";
@@ -32,8 +33,7 @@ import {
unban,
} from "../handlers/guild.ts";
import { Member } from "./member.ts";
import { Role, structures } from "./mod.ts";
import { Channel } from "./structures.ts";
import { Channel, Role, structures } from "./mod.ts";
export const initialMemberLoadQueue = new Map<string, MemberCreatePayload[]>();
@@ -135,7 +135,7 @@ export async function createGuild(data: CreateGuildPayload, shardID: number) {
premium_subscription_count: premiumSubscriptionCount,
preferred_locale: preferredLocale,
joined_at: joinedAt,
member_count: memberCount,
member_count: memberCount = 0,
voice_states: voiceStates = [],
channels = [],
members,
@@ -155,7 +155,7 @@ export async function createGuild(data: CreateGuildPayload, shardID: number) {
const restProps: Record<string, ReturnType<typeof createNewProp>> = {};
for (const key of Object.keys(rest)) {
restProps[key] = createNewProp((rest as any)[key]);
restProps[key] = createNewProp(rest[key]);
}
const guild = Object.create(baseGuild, {
@@ -188,7 +188,7 @@ export async function createGuild(data: CreateGuildPayload, shardID: number) {
presences: createNewProp(
new Collection(presences.map((p: Presence) => [p.user.id, p])),
),
memberCount: createNewProp(memberCount || 0),
memberCount: createNewProp(memberCount),
voiceStates: createNewProp(
new Collection(
voiceStates.map((vs: VoiceState) => [
@@ -345,6 +345,9 @@ export interface Guild {
unban(memberID: string): ReturnType<typeof unban>;
/** Get all the invites for this guild. Requires MANAGE_GUILD permission */
invites(): ReturnType<typeof getInvites>;
// Index signature
[key: string]: ValueOf<Guild>;
}
interface CleanVoiceState extends VoiceState {
+6 -2
View File
@@ -6,6 +6,7 @@ import {
ImageSize,
MemberCreatePayload,
MessageContent,
ValueOf,
} from "../../types/mod.ts";
import { cache } from "../../util/cache.ts";
import { Collection } from "../../util/collection.ts";
@@ -88,12 +89,12 @@ export async function createMember(data: MemberCreatePayload, guildID: string) {
data.user || {};
const restProps: Record<string, ReturnType<typeof createNewProp>> = {};
for (const key of Object.keys(rest)) {
restProps[key] = createNewProp((rest as any)[key]);
restProps[key] = createNewProp(rest[key]);
}
for (const key of Object.keys(user)) {
// @ts-ignore
restProps[key] = createNewProp(user[key]);
}
@@ -198,4 +199,7 @@ export interface Member {
roleID: string,
reason?: string,
): ReturnType<typeof removeRole>;
// Index signature
[key: string]: ValueOf<Member>;
}
+9 -8
View File
@@ -34,15 +34,15 @@ const baseMessage: Partial<Message> = {
return cache.channels.get(this.channelID!);
},
get guild() {
if (!this.guildID) return;
if (!this.guildID) return undefined;
return cache.guilds.get(this.guildID);
},
get member() {
if (!this.author?.id) return;
if (!this.author?.id) return undefined;
return cache.members.get(this.author?.id);
},
get guildMember() {
if (!this.guildID) return;
if (!this.guildID) return undefined;
return this.member?.guilds.get(this.guildID);
},
get link() {
@@ -116,12 +116,13 @@ const baseMessage: Partial<Message> = {
},
};
// deno-lint-ignore require-await
export async function createMessage(data: MessageCreateOptions) {
const {
guild_id: guildID,
guild_id: guildID = "",
channel_id: channelID,
mentions_everyone: mentionsEveryone,
mention_channels: mentionChannelIDs,
mention_channels: mentionChannelIDs = [],
mention_roles: mentionRoleIDs,
webhook_id: webhookID,
message_reference: messageReference,
@@ -133,7 +134,7 @@ export async function createMessage(data: MessageCreateOptions) {
const restProps: Record<string, ReturnType<typeof createNewProp>> = {};
for (const key of Object.keys(rest)) {
restProps[key] = createNewProp((rest as any)[key]);
restProps[key] = createNewProp(rest[key]);
}
const message = Object.create(baseMessage, {
@@ -141,11 +142,11 @@ export async function createMessage(data: MessageCreateOptions) {
/** The message id of the original message if this message was sent as a reply. If null, the original message was deleted. */
referencedMessageID: createNewProp(referencedMessageID),
channelID: createNewProp(channelID),
guildID: createNewProp(guildID || ""),
guildID: createNewProp(guildID),
mentions: createNewProp(data.mentions.map((m) => m.id)),
mentionsEveryone: createNewProp(mentionsEveryone),
mentionRoleIDs: createNewProp(mentionRoleIDs),
mentionChannelIDs: createNewProp(mentionChannelIDs?.map((m) => m.id) || []),
mentionChannelIDs: createNewProp(mentionChannelIDs.map((m) => m.id)),
webhookID: createNewProp(webhookID),
messageReference: createNewProp(messageReference),
timestamp: createNewProp(Date.parse(data.timestamp)),
+9 -10
View File
@@ -6,16 +6,16 @@ import { deleteRole, editRole } from "../handlers/guild.ts";
import { Guild } from "./guild.ts";
import { Member } from "./member.ts";
const baseRole: any = {
const baseRole: Partial<Role> = {
get guild() {
return cache.guilds.find((g) => g.roles.has(this.id));
return cache.guilds.find((g) => g.roles.has(this.id!));
},
get hexColor() {
return this.color!.toString(16);
},
get members() {
return cache.members.filter((m) =>
m.guilds.some((g) => g.roles.includes(this.id))
m.guilds.some((g) => g.roles.includes(this.id!))
);
},
get mention() {
@@ -66,19 +66,18 @@ const baseRole: any = {
},
};
export async function createRole(data: RoleData) {
const { tags, ...rest } = data;
// deno-lint-ignore require-await
export async function createRole({ tags = {}, ...rest }: RoleData) {
const restProps: Record<string, ReturnType<typeof createNewProp>> = {};
for (const key of Object.keys(rest)) {
restProps[key] = createNewProp((rest as any)[key]);
restProps[key] = createNewProp(rest[key]);
}
const role = Object.create(baseRole, {
...restProps,
botID: createNewProp(tags?.bot_id),
isNitroBoostRole: createNewProp("premium_subscriber" in (tags ?? {})),
integrationID: createNewProp(tags?.integration_id),
botID: createNewProp(tags.bot_id),
isNitroBoostRole: createNewProp("premium_subscriber" in tags),
integrationID: createNewProp(tags.integration_id),
});
return role as Role;
-7
View File
@@ -1,7 +0,0 @@
export * from "./channel.ts";
export * from "./guild.ts";
export * from "./member.ts";
export * from "./message.ts";
export * from "./mod.ts";
export * from "./role.ts";
export * from "./template.ts";
+4 -2
View File
@@ -3,8 +3,10 @@ import { cache } from "../../util/cache.ts";
import { createNewProp } from "../../util/utils.ts";
import { Guild } from "./guild.ts";
const baseTemplate: any = {
const baseTemplate: Partial<Template> = {
get sourceGuild() {
// deno-lint-ignore getter-return
if (!this.sourceGuildID) return;
return cache.guilds.get(this.sourceGuildID);
},
};
@@ -25,7 +27,7 @@ export function createTemplate(
const restProps: Record<string, Partial<PropertyDescriptor>> = {};
for (const key of Object.keys(rest)) {
restProps[key] = createNewProp((rest as any)[key]);
restProps[key] = createNewProp(rest[key]);
}
return Object.create(baseTemplate, {