Update djs & knub (#395)

* update pkgs

Signed-off-by: GitHub <noreply@github.com>

* new knub typings

Signed-off-by: GitHub <noreply@github.com>

* more pkg updates

Signed-off-by: GitHub <noreply@github.com>

* more fixes

Signed-off-by: GitHub <noreply@github.com>

* channel typings

Signed-off-by: GitHub <noreply@github.com>

* more message utils typings fixes

Signed-off-by: GitHub <noreply@github.com>

* migrate permissions

Signed-off-by: GitHub <noreply@github.com>

* fix: InternalPoster webhookables

Signed-off-by: GitHub <noreply@github.com>

* djs typings: Attachment & Util

Signed-off-by: GitHub <noreply@github.com>

* more typings

Signed-off-by: GitHub <noreply@github.com>

* fix: rename permissionNames

Signed-off-by: GitHub <noreply@github.com>

* more fixes

Signed-off-by: GitHub <noreply@github.com>

* half the number of errors

* knub commands => messageCommands

Signed-off-by: GitHub <noreply@github.com>

* configPreprocessor => configParser

Signed-off-by: GitHub <noreply@github.com>

* fix channel.messages

Signed-off-by: GitHub <noreply@github.com>

* revert automod any typing

Signed-off-by: GitHub <noreply@github.com>

* more configParser typings

Signed-off-by: GitHub <noreply@github.com>

* revert

Signed-off-by: GitHub <noreply@github.com>

* remove knub type params

Signed-off-by: GitHub <noreply@github.com>

* fix more MessageEmbed / MessageOptions

Signed-off-by: GitHub <noreply@github.com>

* dumb commit for @almeidx to see why this is stupid

Signed-off-by: GitHub <noreply@github.com>

* temp disable custom_events

Signed-off-by: GitHub <noreply@github.com>

* more minor typings fixes - 23 err left

Signed-off-by: GitHub <noreply@github.com>

* update djs dep

* +debug build method (revert this)

Signed-off-by: GitHub <noreply@github.com>

* Revert "+debug build method (revert this)"

This reverts commit a80af1e729b742d1aad1097df538d224fbd32ce7.

* Redo +debug build (Revert this)

Signed-off-by: GitHub <noreply@github.com>

* uniform before/after Load shorthands

Signed-off-by: GitHub <noreply@github.com>

* remove unused imports & add prettier plugin

Signed-off-by: GitHub <noreply@github.com>

* env fixes for web platform hosting

Signed-off-by: GitHub <noreply@github.com>

* feat: knub v32-next; related fixes

* fix: allow legacy keys in change_perms action

* fix: request Message Content intent

* fix: use Knub's config validation logic in API

* fix(dashboard): fix error when there are no message and/or slash commands in a plugin

* fix(automod): start_thread action thread options

* fix(CustomEvents): message command types

* chore: remove unneeded type annotation

* feat: add forum channel icon; use thread icon for news threads

* chore: make tslint happy

* chore: fix formatting

---------

Signed-off-by: GitHub <noreply@github.com>
Co-authored-by: almeidx <almeidx@pm.me>
Co-authored-by: Dragory <2606411+Dragory@users.noreply.github.com>
This commit is contained in:
Tiago R 2023-04-01 12:58:17 +01:00 committed by GitHub
parent 293115af22
commit 06877e90cc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
476 changed files with 2965 additions and 3251 deletions

View file

@ -1,11 +1,13 @@
import {
APIEmbed,
ChannelType,
Client,
Constants,
DiscordAPIError,
EmbedData,
EmbedType,
Emoji,
escapeCodeBlock,
Guild,
GuildAuditLogs,
GuildAuditLogsEntry,
GuildBasedChannel,
GuildChannel,
GuildMember,
@ -14,19 +16,14 @@ import {
InviteGuild,
LimitedCollection,
Message,
MessageAttachment,
MessageEmbed,
MessageEmbedOptions,
MessageCreateOptions,
MessageMentionOptions,
MessageOptions,
PartialChannelData,
PartialMessage,
Snowflake,
Sticker,
TextChannel,
ThreadChannel,
TextBasedChannel,
User,
Util,
} from "discord.js";
import emojiRegex from "emoji-regex";
import { either } from "fp-ts/lib/Either";
@ -37,18 +34,17 @@ import humanizeDuration from "humanize-duration";
import * as t from "io-ts";
import { isEqual } from "lodash";
import moment from "moment-timezone";
import { performance } from "perf_hooks";
import tlds from "tlds";
import tmp from "tmp";
import { URL } from "url";
import { z, ZodError } from "zod";
import { ISavedMessageAttachmentData, SavedMessage } from "./data/entities/SavedMessage";
import { getProfiler } from "./profiler";
import { SimpleCache } from "./SimpleCache";
import { ChannelTypeStrings } from "./types";
import { sendDM } from "./utils/sendDM";
import { waitForButtonConfirm } from "./utils/waitForInteraction";
import { decodeAndValidateStrict, StrictValidationError } from "./validatorUtils";
import { z, ZodError } from "zod";
import { getProfiler } from "./profiler";
import { performance } from "perf_hooks";
const fsp = fs.promises;
@ -179,7 +175,7 @@ function tDeepPartialProp(prop: any) {
}
}
export function getScalarDifference<T>(
export function getScalarDifference<T extends object>(
base: T,
object: T,
ignoreKeys: string[] = [],
@ -258,7 +254,7 @@ export function nonNullish<V>(v: V): v is NonNullable<V> {
export type GuildInvite = Invite & { guild: InviteGuild | Guild };
export type GroupDMInvite = Invite & {
channel: PartialChannelData;
type: typeof Constants.ChannelTypes.GROUP_DM;
type: typeof ChannelType.GroupDM;
};
/**
@ -392,8 +388,7 @@ export const zEmbedInput = z.object({
.nullable(),
});
export type EmbedWith<T extends keyof MessageEmbedOptions> = MessageEmbedOptions &
Pick<Required<MessageEmbedOptions>, T>;
export type EmbedWith<T extends keyof APIEmbed> = APIEmbed & Pick<Required<APIEmbed>, T>;
export const zStrictMessageContent = z.object({
content: z.string().optional(),
@ -406,7 +401,7 @@ export type ZStrictMessageContent = z.infer<typeof zStrictMessageContent>;
export type StrictMessageContent = {
content?: string;
tts?: boolean;
embeds?: MessageEmbedOptions[];
embeds?: APIEmbed[];
};
export const tStrictMessageContent = t.type({
@ -573,7 +568,7 @@ export function convertMSToDelayString(ms: number): string {
return result;
}
export function successMessage(str, emoji = "<:zep_check:650361014180904971>") {
export function successMessage(str: string, emoji = "<:zep_check:650361014180904971>") {
return emoji ? `${emoji} ${str}` : str;
}
@ -648,7 +643,7 @@ interface MatchedURL extends URL {
}
export function getUrlsInString(str: string, onlyUnique = false): MatchedURL[] {
let matches = str.match(urlRegex) || [];
let matches = [...(str.match(urlRegex) ?? [])];
if (onlyUnique) {
matches = unique(matches);
}
@ -953,7 +948,7 @@ export function chunkMessageLines(str: string, maxChunkLength = 1990): string[]
}
export async function createChunkedMessage(
channel: TextChannel | ThreadChannel | User,
channel: TextBasedChannel | User,
messageText: string,
allowedMentions?: MessageMentionOptions,
) {
@ -1403,17 +1398,21 @@ export async function resolveStickerId(bot: Client, id: Snowflake): Promise<Stic
return fetchedSticker;
}
export async function confirm(channel: TextChannel, userId: string, content: MessageOptions): Promise<boolean> {
export async function confirm(
channel: GuildTextBasedChannel,
userId: string,
content: MessageCreateOptions,
): Promise<boolean> {
return waitForButtonConfirm(channel, content, { restrictToId: userId });
}
export function messageSummary(msg: SavedMessage) {
// Regular text content
let result = "```\n" + (msg.data.content ? Util.escapeCodeBlock(msg.data.content) : "<no text content>") + "```";
let result = "```\n" + (msg.data.content ? escapeCodeBlock(msg.data.content) : "<no text content>") + "```";
// Rich embed
const richEmbed = (msg.data.embeds || []).find((e) => (e as MessageEmbed).type === "rich");
if (richEmbed) result += "Embed:```" + Util.escapeCodeBlock(JSON.stringify(richEmbed)) + "```";
const richEmbed = (msg.data.embeds || []).find((e) => (e as EmbedData).type === EmbedType.Rich);
if (richEmbed) result += "Embed:```" + escapeCodeBlock(JSON.stringify(richEmbed)) + "```";
// Attachments
if (msg.data.attachments && msg.data.attachments.length) {
@ -1442,9 +1441,9 @@ export function verboseUserName(user: User | UnknownUser): string {
return `**${user.tag}** (\`${user.id}\`)`;
}
export function verboseChannelMention(channel: GuildChannel | ThreadChannel): string {
export function verboseChannelMention(channel: GuildBasedChannel): string {
const plainTextName =
channel.type === ChannelTypeStrings.VOICE || channel.type === ChannelTypeStrings.STAGE
channel.type === ChannelType.GuildVoice || channel.type === ChannelType.GuildStageVoice
? channel.name
: `#${channel.name}`;
return `<#${channel.id}> (**${plainTextName}**, \`${channel.id}\`)`;
@ -1578,7 +1577,7 @@ export function isGuildInvite(invite: Invite): invite is GuildInvite {
}
export function isGroupDMInvite(invite: Invite): invite is GroupDMInvite {
return invite.guild == null && invite.channel?.type === ChannelTypeStrings.GROUP;
return invite.guild == null && invite.channel?.type === ChannelType.GroupDM;
}
export function inviteHasCounts(invite: Invite): invite is Invite {