Merge pull request #742 from discordeno/fix-errors-imports

fix: bunch of imports that were missing
This commit is contained in:
Skillz4Killz
2021-04-03 23:37:14 -04:00
committed by GitHub
95 changed files with 311 additions and 226 deletions
+2 -1
View File
@@ -1,5 +1,6 @@
import { getGatewayBot } from "./helpers/misc/get_gateway_bot.ts"; import { getGatewayBot } from "./helpers/misc/get_gateway_bot.ts";
import { DiscordGatewayIntents } from "./types/gateway/gateway_intents.ts"; import { DiscordGatewayIntents } from "./types/gateway/gateway_intents.ts";
import { DiscordGetGatewayBot } from "./types/gateway/get_gateway_bot.ts";
import { baseEndpoints, GATEWAY_VERSION } from "./util/constants.ts"; import { baseEndpoints, GATEWAY_VERSION } from "./util/constants.ts";
import { spawnShards } from "./ws/shard_manager.ts"; import { spawnShards } from "./ws/shard_manager.ts";
@@ -14,7 +15,7 @@ export let botGatewayData: DiscordGetGatewayBot;
export let proxyWSURL = `wss://gateway.discord.gg`; export let proxyWSURL = `wss://gateway.discord.gg`;
export let lastShardId = 0; export let lastShardId = 0;
export const identifyPayload: DiscordIdentify = { export const identifyPayload = {
token: "", token: "",
compress: true, compress: true,
properties: { properties: {
+2 -1
View File
@@ -1,7 +1,8 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { structures } from "../../structures/mod.ts"; import { structures } from "../../structures/mod.ts";
import { DiscordChannel, DiscordGatewayPayload } from "../../types/mod.ts"; import { DiscordChannel } from "../../types/channels/channel.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
export async function handleChannelCreate(data: DiscordGatewayPayload) { export async function handleChannelCreate(data: DiscordGatewayPayload) {
const payload = data.d as DiscordChannel; const payload = data.d as DiscordChannel;
+3 -5
View File
@@ -1,10 +1,8 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { import { DiscordChannel } from "../../types/channels/channel.ts";
DiscordChannel, import { DiscordChannelTypes } from "../../types/channels/channel_types.ts";
DiscordChannelTypes, import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
DiscordGatewayPayload,
} from "../../types/mod.ts";
export async function handleChannelDelete(data: DiscordGatewayPayload) { export async function handleChannelDelete(data: DiscordGatewayPayload) {
const payload = data.d as DiscordChannel; const payload = data.d as DiscordChannel;
+2 -4
View File
@@ -1,9 +1,7 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { import { DiscordChannelPinsUpdate } from "../../types/channels/channel_pins_update.ts";
DiscordChannelPinsUpdate, import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
DiscordGatewayPayload,
} from "../../types/mod.ts";
export async function handleChannelPinsUpdate(data: DiscordGatewayPayload) { export async function handleChannelPinsUpdate(data: DiscordGatewayPayload) {
const payload = data.d as DiscordChannelPinsUpdate; const payload = data.d as DiscordChannelPinsUpdate;
+2 -1
View File
@@ -1,7 +1,8 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { structures } from "../../structures/mod.ts"; import { structures } from "../../structures/mod.ts";
import { DiscordChannel, DiscordGatewayPayload } from "../../types/mod.ts"; import { DiscordChannel } from "../../types/channels/channel.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
export async function handleChannelUpdate(data: DiscordGatewayPayload) { export async function handleChannelUpdate(data: DiscordGatewayPayload) {
const payload = data.d as DiscordChannel; const payload = data.d as DiscordChannel;
@@ -1,4 +1,5 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
export function handleApplicationCommandCreate( export function handleApplicationCommandCreate(
data: DiscordGatewayPayload, data: DiscordGatewayPayload,
@@ -1,4 +1,5 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
export function handleApplicationCommandDelete(data: DiscordGatewayPayload) { export function handleApplicationCommandDelete(data: DiscordGatewayPayload) {
const { const {
@@ -1,4 +1,5 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
export function handleApplicationCommandUpdate(data: DiscordGatewayPayload) { export function handleApplicationCommandUpdate(data: DiscordGatewayPayload) {
const { const {
+2 -4
View File
@@ -1,10 +1,8 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import {
DiscordGatewayPayload,
DiscordGuildEmojisUpdate,
} from "../../types/mod.ts";
import { Collection } from "../../util/collection.ts"; import { Collection } from "../../util/collection.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import { DiscordGuildEmojisUpdate } from "../../types/emojis/guild_emojis_update.ts";
export async function handleGuildEmojisUpdate(data: DiscordGatewayPayload) { export async function handleGuildEmojisUpdate(data: DiscordGatewayPayload) {
const payload = data.d as DiscordGuildEmojisUpdate; const payload = data.d as DiscordGuildEmojisUpdate;
+1
View File
@@ -1,5 +1,6 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
export async function handleGuildBanAdd(data: DiscordGatewayPayload) { export async function handleGuildBanAdd(data: DiscordGatewayPayload) {
const payload = data.d as DiscordGuildBanAddRemove; const payload = data.d as DiscordGuildBanAddRemove;
+1
View File
@@ -1,5 +1,6 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
export async function handleGuildBanRemove(data: DiscordGatewayPayload) { export async function handleGuildBanRemove(data: DiscordGatewayPayload) {
const payload = data.d as DiscordGuildBanAddRemove; const payload = data.d as DiscordGuildBanAddRemove;
+2
View File
@@ -2,6 +2,8 @@ import { eventHandlers } from "../../bot.ts";
import { cache, cacheHandlers } from "../../cache.ts"; import { cache, cacheHandlers } from "../../cache.ts";
import { structures } from "../../structures/mod.ts"; import { structures } from "../../structures/mod.ts";
import { basicShards } from "../../ws/shard.ts"; import { basicShards } from "../../ws/shard.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import { DiscordGuild } from "../../types/guilds/guild.ts";
export async function handleGuildCreate( export async function handleGuildCreate(
data: DiscordGatewayPayload, data: DiscordGatewayPayload,
+2
View File
@@ -1,6 +1,8 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { basicShards } from "../../ws/shard.ts"; import { basicShards } from "../../ws/shard.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import { DiscordUnavailableGuild } from "../../types/guilds/unavailable_guild.ts";
export async function handleGuildDelete( export async function handleGuildDelete(
data: DiscordGatewayPayload, data: DiscordGatewayPayload,
@@ -1,5 +1,7 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import { DiscordGuildIntegrationsUpdate } from "../../types/guilds/guild_integrations_update.ts";
export async function handleGuildIntegrationsUpdate( export async function handleGuildIntegrationsUpdate(
data: DiscordGatewayPayload, data: DiscordGatewayPayload,
+2
View File
@@ -1,5 +1,7 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import { DiscordGuild } from "../../types/guilds/guild.ts";
export async function handleGuildUpdate(data: DiscordGatewayPayload) { export async function handleGuildUpdate(data: DiscordGatewayPayload) {
const payload = data.d as DiscordGuild; const payload = data.d as DiscordGuild;
@@ -1,4 +1,5 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
export function handleIntegrationCreate( export function handleIntegrationCreate(
data: DiscordGatewayPayload, data: DiscordGatewayPayload,
@@ -1,4 +1,5 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
export function handleIntegrationDelete(data: DiscordGatewayPayload) { export function handleIntegrationDelete(data: DiscordGatewayPayload) {
const { const {
@@ -1,4 +1,5 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
export function handleIntegrationUpdate(data: DiscordGatewayPayload) { export function handleIntegrationUpdate(data: DiscordGatewayPayload) {
const { const {
@@ -1,6 +1,7 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { structures } from "../../structures/mod.ts"; import { structures } from "../../structures/mod.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
export async function handleInteractionCreate(data: DiscordGatewayPayload) { export async function handleInteractionCreate(data: DiscordGatewayPayload) {
const payload = data.d as InteractionCommandPayload; const payload = data.d as InteractionCommandPayload;
+2
View File
@@ -1,4 +1,6 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import { DiscordInviteCreate } from "../../types/invites/invite_create.ts";
export function handleInviteCreate(payload: DiscordGatewayPayload) { export function handleInviteCreate(payload: DiscordGatewayPayload) {
// TODO: replace with tocamelcase // TODO: replace with tocamelcase
+2
View File
@@ -1,4 +1,6 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { DiscordInviteDelete } from "../../types/invites/invite_delete.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
export function handleInviteDelete(payload: DiscordGatewayPayload) { export function handleInviteDelete(payload: DiscordGatewayPayload) {
const { const {
@@ -1,6 +1,8 @@
import { cache, cacheHandlers } from "../../cache.ts"; import { cache, cacheHandlers } from "../../cache.ts";
import { structures } from "../../structures/mod.ts"; import { structures } from "../../structures/mod.ts";
import { Collection } from "../../util/collection.ts"; import { Collection } from "../../util/collection.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import { DiscordGuildMembersChunk } from "../../types/members/guild_members_chunk.ts";
export async function handleGuildMembersChunk(data: DiscordGatewayPayload) { export async function handleGuildMembersChunk(data: DiscordGatewayPayload) {
const payload = data.d as DiscordGuildMembersChunk; const payload = data.d as DiscordGuildMembersChunk;
+2
View File
@@ -1,6 +1,8 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { structures } from "../../structures/mod.ts"; import { structures } from "../../structures/mod.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import { DiscordGuildMemberAdd } from "../../types/members/guild_member_add.ts";
export async function handleGuildMemberAdd(data: DiscordGatewayPayload) { export async function handleGuildMemberAdd(data: DiscordGatewayPayload) {
const payload = data.d as DiscordGuildMemberAdd; const payload = data.d as DiscordGuildMemberAdd;
@@ -1,5 +1,7 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import { DiscordGuildMemberRemove } from "../../types/members/guild_member_remove.ts";
export async function handleGuildMemberRemove(data: DiscordGatewayPayload) { export async function handleGuildMemberRemove(data: DiscordGatewayPayload) {
const payload = data.d as DiscordGuildMemberRemove; const payload = data.d as DiscordGuildMemberRemove;
@@ -1,6 +1,8 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { structures } from "../../structures/mod.ts"; import { structures } from "../../structures/mod.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import { DiscordGuildMemberUpdate } from "../../types/members/guild_member_update.ts";
export async function handleGuildMemberUpdate(data: DiscordGatewayPayload) { export async function handleGuildMemberUpdate(data: DiscordGatewayPayload) {
const payload = data.d as DiscordGuildMemberUpdate; const payload = data.d as DiscordGuildMemberUpdate;
+2
View File
@@ -1,6 +1,8 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { structures } from "../../structures/mod.ts"; import { structures } from "../../structures/mod.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import { DiscordMessage } from "../../types/messages/message.ts";
export async function handleMessageCreate(data: DiscordGatewayPayload) { export async function handleMessageCreate(data: DiscordGatewayPayload) {
const payload = data.d as DiscordMessage; const payload = data.d as DiscordMessage;
+2
View File
@@ -1,5 +1,7 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import { DiscordMessageDelete } from "../../types/messages/message_delete.ts";
export async function handleMessageDelete(data: DiscordGatewayPayload) { export async function handleMessageDelete(data: DiscordGatewayPayload) {
const payload = data.d as DiscordMessageDelete; const payload = data.d as DiscordMessageDelete;
@@ -1,5 +1,7 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import { DiscordMessageDeleteBulk } from "../../types/messages/message_delete_bulk.ts";
export async function handleMessageDeleteBulk(data: DiscordGatewayPayload) { export async function handleMessageDeleteBulk(data: DiscordGatewayPayload) {
const payload = data.d as DiscordMessageDeleteBulk; const payload = data.d as DiscordMessageDeleteBulk;
@@ -1,6 +1,8 @@
import { botId, eventHandlers } from "../../bot.ts"; import { botId, eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { structures } from "../../structures/mod.ts"; import { structures } from "../../structures/mod.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import { DiscordMessageReactionAdd } from "../../types/messages/message_reaction_add.ts";
export async function handleMessageReactionAdd(data: DiscordGatewayPayload) { export async function handleMessageReactionAdd(data: DiscordGatewayPayload) {
const payload = data.d as DiscordMessageReactionAdd; const payload = data.d as DiscordMessageReactionAdd;
@@ -1,6 +1,8 @@
import { botId, eventHandlers } from "../../bot.ts"; import { botId, eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { structures } from "../../structures/mod.ts"; import { structures } from "../../structures/mod.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import { DiscordMessageReactionRemove } from "../../types/messages/message_reaction_remove.ts";
export async function handleMessageReactionRemove( export async function handleMessageReactionRemove(
data: DiscordGatewayPayload, data: DiscordGatewayPayload,
@@ -1,5 +1,7 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import { DiscordMessageReactionRemoveAll } from "../../types/messages/message_reaction_remove_all.ts";
export async function handleMessageReactionRemoveAll( export async function handleMessageReactionRemoveAll(
data: DiscordGatewayPayload, data: DiscordGatewayPayload,
@@ -1,5 +1,7 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import { DiscordMessageReactionRemoveEmoji } from "../../types/messages/message_reaction_remove_emoji.ts";
export async function handleMessageReactionRemoveEmoji( export async function handleMessageReactionRemoveEmoji(
data: DiscordGatewayPayload, data: DiscordGatewayPayload,
+2
View File
@@ -1,6 +1,8 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { structures } from "../../structures/mod.ts"; import { structures } from "../../structures/mod.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import { DiscordMessage } from "../../types/messages/message.ts";
export async function handleMessageUpdate(data: DiscordGatewayPayload) { export async function handleMessageUpdate(data: DiscordGatewayPayload) {
const payload = data.d as DiscordMessage; const payload = data.d as DiscordMessage;
+2
View File
@@ -1,5 +1,7 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import { DiscordPresenceUpdate } from "../../types/misc/presence_update.ts";
export async function handlePresenceUpdate(data: DiscordGatewayPayload) { export async function handlePresenceUpdate(data: DiscordGatewayPayload) {
const payload = data.d as DiscordPresenceUpdate; const payload = data.d as DiscordPresenceUpdate;
+2
View File
@@ -9,6 +9,8 @@ import { initialMemberLoadQueue } from "../../structures/guild.ts";
import { structures } from "../../structures/mod.ts"; import { structures } from "../../structures/mod.ts";
import { delay } from "../../util/utils.ts"; import { delay } from "../../util/utils.ts";
import { allowNextShard, basicShards } from "../../ws/mod.ts"; import { allowNextShard, basicShards } from "../../ws/mod.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import { DiscordReady } from "../../types/gateway/ready.ts";
export async function handleReady( export async function handleReady(
data: DiscordGatewayPayload, data: DiscordGatewayPayload,
+2
View File
@@ -1,4 +1,6 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import { DiscordTypingStart } from "../../types/misc/typing_start.ts";
export function handleTypingStart(data: DiscordGatewayPayload) { export function handleTypingStart(data: DiscordGatewayPayload) {
eventHandlers.typingStart?.(data.d as DiscordTypingStart); eventHandlers.typingStart?.(data.d as DiscordTypingStart);
+2
View File
@@ -1,5 +1,7 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import { DiscordUser } from "../../types/users/user.ts";
export async function handleUserUpdate(data: DiscordGatewayPayload) { export async function handleUserUpdate(data: DiscordGatewayPayload) {
const userData = data.d as DiscordUser; const userData = data.d as DiscordUser;
+1
View File
@@ -1,6 +1,7 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { structures } from "../../structures/mod.ts"; import { structures } from "../../structures/mod.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
export async function handleGuildRoleCreate(data: DiscordGatewayPayload) { export async function handleGuildRoleCreate(data: DiscordGatewayPayload) {
const payload = data.d as DiscordGuildRoleCreateUpdate; const payload = data.d as DiscordGuildRoleCreateUpdate;
+2
View File
@@ -1,5 +1,7 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import { DiscordGuildRoleDelete } from "../../types/guilds/guild_role_delete.ts";
export async function handleGuildRoleDelete(data: DiscordGatewayPayload) { export async function handleGuildRoleDelete(data: DiscordGatewayPayload) {
const payload = data.d as DiscordGuildRoleDelete; const payload = data.d as DiscordGuildRoleDelete;
+1
View File
@@ -1,6 +1,7 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { structures } from "../../structures/mod.ts"; import { structures } from "../../structures/mod.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
export async function handleGuildRoleUpdate(data: DiscordGatewayPayload) { export async function handleGuildRoleUpdate(data: DiscordGatewayPayload) {
const payload = data.d as DiscordGuildRoleCreateUpdate; const payload = data.d as DiscordGuildRoleCreateUpdate;
+2
View File
@@ -1,6 +1,8 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { structures } from "../../structures/mod.ts"; import { structures } from "../../structures/mod.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import { DiscordVoiceState } from "../../types/voice/voice_state.ts";
export async function handleVoiceStateUpdate(data: DiscordGatewayPayload) { export async function handleVoiceStateUpdate(data: DiscordGatewayPayload) {
const payload = data.d as DiscordVoiceState; const payload = data.d as DiscordVoiceState;
+2
View File
@@ -1,4 +1,6 @@
import { eventHandlers } from "../../bot.ts"; import { eventHandlers } from "../../bot.ts";
import { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts";
import { DiscordWebhooksUpdate } from "../../types/webhooks/webhooks_update.ts";
export function handleWebhooksUpdate(data: DiscordGatewayPayload) { export function handleWebhooksUpdate(data: DiscordGatewayPayload) {
const options = data.d as DiscordWebhooksUpdate; const options = data.d as DiscordWebhooksUpdate;
+11 -10
View File
@@ -1,12 +1,10 @@
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { structures } from "../../structures/mod.ts"; import { structures } from "../../structures/mod.ts";
import { import { DiscordChannel } from "../../types/channels/channel.ts";
CreateGuildChannel, import { DiscordChannelTypes } from "../../types/channels/channel_types.ts";
DiscordChannel, import { CreateGuildChannel } from "../../types/guilds/create_guild_channel.ts";
DiscordChannelTypes, import { PermissionStrings } from "../../types/permissions/permission_strings.ts";
PermissionStrings,
} from "../../types/mod.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
import { import {
calculateBits, calculateBits,
@@ -17,7 +15,7 @@ import {
export async function createChannel( export async function createChannel(
guildId: string, guildId: string,
name: string, name: string,
options?: CreateGuildChannel, options?: CreateGuildChannel
) { ) {
const requiredPerms: Set<PermissionStrings> = new Set(["MANAGE_CHANNELS"]); const requiredPerms: Set<PermissionStrings> = new Set(["MANAGE_CHANNELS"]);
@@ -28,8 +26,10 @@ export async function createChannel(
await requireBotGuildPermissions(guildId, [...requiredPerms]); await requireBotGuildPermissions(guildId, [...requiredPerms]);
const result = const result = (await rest.runMethod(
(await rest.runMethod("post", endpoints.GUILD_CHANNELS(guildId), { "post",
endpoints.GUILD_CHANNELS(guildId),
{
...options, ...options,
name, name,
permission_overwrites: options?.permissionOverwrites?.map((perm) => ({ permission_overwrites: options?.permissionOverwrites?.map((perm) => ({
@@ -39,7 +39,8 @@ export async function createChannel(
deny: calculateBits(perm.deny), deny: calculateBits(perm.deny),
})), })),
type: options?.type || DiscordChannelTypes.GUILD_TEXT, type: options?.type || DiscordChannelTypes.GUILD_TEXT,
})) as DiscordChannel; }
)) as DiscordChannel;
const channelStruct = await structures.createChannelStruct(result); const channelStruct = await structures.createChannelStruct(result);
await cacheHandlers.set("channels", channelStruct.id, channelStruct); await cacheHandlers.set("channels", channelStruct.id, channelStruct);
+1 -1
View File
@@ -1,6 +1,6 @@
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { Errors } from "../../types/mod.ts"; import { Errors } from "../../types/misc/errors.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
import { requireBotGuildPermissions } from "../../util/permissions.ts"; import { requireBotGuildPermissions } from "../../util/permissions.ts";
@@ -1,5 +1,5 @@
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { Overwrite } from "../../types/mod.ts"; import { Overwrite } from "../../types/channels/overwrite.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
import { import {
calculateBits, calculateBits,
+1 -1
View File
@@ -1,5 +1,5 @@
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { DiscordFollowedChannel } from "../../types/mod.ts"; import { DiscordFollowedChannel } from "../../types/channels/followed_channel.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
import { requireBotChannelPermissions } from "../../util/permissions.ts"; import { requireBotChannelPermissions } from "../../util/permissions.ts";
+5 -6
View File
@@ -1,7 +1,7 @@
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { structures } from "../../structures/mod.ts"; import { structures } from "../../structures/mod.ts";
import { DiscordChannel } from "../../types/mod.ts"; import { DiscordChannel } from "../../types/channels/channel.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
/** Fetches a single channel object from the api. /** Fetches a single channel object from the api.
@@ -9,11 +9,10 @@ import { endpoints } from "../../util/constants.ts";
* ⚠️ **If you need this, you are probably doing something wrong. This is not intended for use. Your channels will be cached in your guild.** * ⚠️ **If you need this, you are probably doing something wrong. This is not intended for use. Your channels will be cached in your guild.**
*/ */
export async function getChannel(channelId: string, addToCache = true) { export async function getChannel(channelId: string, addToCache = true) {
const result = const result = (await rest.runMethod(
(await rest.runMethod( "get",
"get", endpoints.CHANNEL_BASE(channelId),
endpoints.CHANNEL_BASE(channelId), )) as DiscordChannel;
)) as DiscordChannel;
const channelStruct = await structures.createChannelStruct( const channelStruct = await structures.createChannelStruct(
result, result,
+1 -1
View File
@@ -1,5 +1,5 @@
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { DiscordWebhook } from "../../types/mod.ts"; import { DiscordWebhook } from "../../types/webhooks/webhook.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
import { requireBotChannelPermissions } from "../../util/permissions.ts"; import { requireBotChannelPermissions } from "../../util/permissions.ts";
+5 -6
View File
@@ -1,7 +1,7 @@
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { structures } from "../../structures/mod.ts"; import { structures } from "../../structures/mod.ts";
import { DiscordChannel } from "../../types/mod.ts"; import { DiscordChannel } from "../../types/channels/channel.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
/** Returns a list of guild channel objects. /** Returns a list of guild channel objects.
@@ -9,11 +9,10 @@ import { endpoints } from "../../util/constants.ts";
* ⚠️ **If you need this, you are probably doing something wrong. This is not intended for use. Your channels will be cached in your guild.** * ⚠️ **If you need this, you are probably doing something wrong. This is not intended for use. Your channels will be cached in your guild.**
*/ */
export async function getChannels(guildId: string, addToCache = true) { export async function getChannels(guildId: string, addToCache = true) {
const result = const result = (await rest.runMethod(
(await rest.runMethod( "get",
"get", endpoints.GUILD_CHANNELS(guildId),
endpoints.GUILD_CHANNELS(guildId), ) as DiscordChannel[]);
) as DiscordChannel[]);
return Promise.all(result.map(async (res) => { return Promise.all(result.map(async (res) => {
const channelStruct = await structures.createChannelStruct(res, guildId); const channelStruct = await structures.createChannelStruct(res, guildId);
+5 -6
View File
@@ -1,15 +1,14 @@
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { structures } from "../../structures/mod.ts"; import { structures } from "../../structures/mod.ts";
import { DiscordMessage } from "../../types/mod.ts"; import { DiscordMessage } from "../../types/messages/message.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
/** Get pinned messages in this channel. */ /** Get pinned messages in this channel. */
export async function getPins(channelId: string) { export async function getPins(channelId: string) {
const result = const result = (await rest.runMethod(
(await rest.runMethod( "get",
"get", endpoints.CHANNEL_PINS(channelId),
endpoints.CHANNEL_PINS(channelId), )) as DiscordMessage[];
)) as DiscordMessage[];
return Promise.all( return Promise.all(
result.map((res) => structures.createMessageStruct(res)), result.map((res) => structures.createMessageStruct(res)),
+2 -1
View File
@@ -1,6 +1,7 @@
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { DiscordChannelTypes, Errors } from "../../types/mod.ts"; import { DiscordChannelTypes } from "../../types/channels/channel_types.ts";
import { Errors } from "../../types/misc/errors.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
import { botHasChannelPermissions } from "../../util/permissions.ts"; import { botHasChannelPermissions } from "../../util/permissions.ts";
+1 -1
View File
@@ -1,5 +1,5 @@
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { ModifyGuildChannelPositions } from "../../types/mod.ts"; import { ModifyGuildChannelPositions } from "../../types/guilds/modify_guild_channel_position.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
/** Modify the positions of channels on the guild. Requires MANAGE_CHANNELS permisison. */ /** Modify the positions of channels on the guild. Requires MANAGE_CHANNELS permisison. */
@@ -1,6 +1,7 @@
import { applicationId } from "../../bot.ts"; import { applicationId } from "../../bot.ts";
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { structures } from "../../structures/mod.ts"; import { structures } from "../../structures/mod.ts";
import { Errors } from "../../types/misc/errors.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
/** To edit your response to a slash command. If a messageId is not provided it will default to editing the original response. */ /** To edit your response to a slash command. If a messageId is not provided it will default to editing the original response. */
+6 -7
View File
@@ -5,13 +5,12 @@ import { endpoints } from "../../util/constants.ts";
/** Fetch all of the global commands for your application. */ /** Fetch all of the global commands for your application. */
export async function getSlashCommands(guildId?: string) { export async function getSlashCommands(guildId?: string) {
const result = const result = (await rest.runMethod(
(await rest.runMethod( "get",
"get", guildId
guildId ? endpoints.COMMANDS_GUILD(applicationId, guildId)
? endpoints.COMMANDS_GUILD(applicationId, guildId) : endpoints.COMMANDS(applicationId),
: endpoints.COMMANDS(applicationId), )) as SlashCommand[];
)) as SlashCommand[];
return new Collection(result.map((command) => [command.name, command])); return new Collection(result.map((command) => [command.name, command]));
} }
+5 -6
View File
@@ -4,12 +4,11 @@ import { endpoints } from "../../util/constants.ts";
/** Create a new guild. Returns a guild object on success. Fires a Guild Create Gateway event. This endpoint can be used only by bots in less than 10 guilds. */ /** Create a new guild. Returns a guild object on success. Fires a Guild Create Gateway event. This endpoint can be used only by bots in less than 10 guilds. */
export async function createGuild(options: CreateServerOptions) { export async function createGuild(options: CreateServerOptions) {
const guild = const guild = (await rest.runMethod(
(await rest.runMethod( "post",
"post", endpoints.GUILDS,
endpoints.GUILDS, options,
options, )) as CreateGuildPayload;
)) as CreateGuildPayload;
return structures.createGuildStruct(guild, 0); return structures.createGuildStruct(guild, 0);
} }
+2 -1
View File
@@ -18,7 +18,8 @@ export async function getAuditLogs(
? AuditLogs[options.action_type] ? AuditLogs[options.action_type]
: undefined, : undefined,
limit: options.limit && options.limit >= 1 && options.limit <= 100 limit: options.limit && options.limit >= 1 && options.limit <= 100
? options.limit : 50, ? options.limit
: 50,
}, },
); );
+4 -5
View File
@@ -7,11 +7,10 @@ import { requireBotGuildPermissions } from "../../util/permissions.ts";
export async function getBans(guildId: string) { export async function getBans(guildId: string) {
await requireBotGuildPermissions(guildId, ["BAN_MEMBERS"]); await requireBotGuildPermissions(guildId, ["BAN_MEMBERS"]);
const results = const results = (await rest.runMethod(
(await rest.runMethod( "get",
"get", endpoints.GUILD_BANS(guildId),
endpoints.GUILD_BANS(guildId), )) as BannedUser[];
)) as BannedUser[];
return new Collection<string, BannedUser>( return new Collection<string, BannedUser>(
results.map((res) => [res.user.id, res]), results.map((res) => [res.user.id, res]),
+1
View File
@@ -1,4 +1,5 @@
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { Errors } from "../../types/misc/errors.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
import { requireBotGuildPermissions } from "../../util/permissions.ts"; import { requireBotGuildPermissions } from "../../util/permissions.ts";
import { camelKeysToSnakeCase } from "../../util/utils.ts"; import { camelKeysToSnakeCase } from "../../util/utils.ts";
+1
View File
@@ -1,5 +1,6 @@
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { Errors } from "../../types/misc/errors.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
/** Returns the widget for the guild. */ /** Returns the widget for the guild. */
@@ -1,4 +1,5 @@
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { Errors } from "../../types/misc/errors.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
/** Returns the widget image URL for the guild. */ /** Returns the widget image URL for the guild. */
+1
View File
@@ -1,5 +1,6 @@
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { Errors } from "../../types/misc/errors.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
import { import {
botHasChannelPermissions, botHasChannelPermissions,
+1
View File
@@ -1,4 +1,5 @@
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { Errors } from "../../types/misc/errors.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
import { urlToBase64 } from "../../util/utils.ts"; import { urlToBase64 } from "../../util/utils.ts";
+1
View File
@@ -1,6 +1,7 @@
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { structures } from "../../structures/mod.ts"; import { structures } from "../../structures/mod.ts";
import { Errors } from "../../types/misc/errors.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
import { import {
requireBotChannelPermissions, requireBotChannelPermissions,
+3 -1
View File
@@ -1,5 +1,7 @@
import { identifyPayload } from "../../bot.ts"; import { identifyPayload } from "../../bot.ts";
import { Member } from "../../structures/mod.ts"; import { Member } from "../../structures/mod.ts";
import { DiscordGatewayIntents } from "../../types/gateway/gateway_intents.ts";
import { Errors } from "../../types/misc/errors.ts";
import { Collection } from "../../util/collection.ts"; import { Collection } from "../../util/collection.ts";
import { requestAllMembers } from "../../ws/shard_manager.ts"; import { requestAllMembers } from "../../ws/shard_manager.ts";
@@ -19,7 +21,7 @@ export function fetchMembers(
// You can request 1 member without the intent // You can request 1 member without the intent
if ( if (
(!options?.limit || options.limit > 1) && (!options?.limit || options.limit > 1) &&
!(identifyPayload.intents && Intents.GUILD_MEMBERS) !(identifyPayload.intents && DiscordGatewayIntents.GUILD_MEMBERS)
) { ) {
throw new Error(Errors.MISSING_INTENT_GUILD_MEMBERS); throw new Error(Errors.MISSING_INTENT_GUILD_MEMBERS);
} }
+5 -4
View File
@@ -1,5 +1,4 @@
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { RequestManager } from "../../rest/request_manager.ts";
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { structures } from "../../structures/mod.ts"; import { structures } from "../../structures/mod.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
@@ -16,9 +15,11 @@ export async function getMember(
const guild = await cacheHandlers.get("guilds", guildId); const guild = await cacheHandlers.get("guilds", guildId);
if (!guild && !options?.force) return; if (!guild && !options?.force) return;
const data = (await rest.runMethod("get", const data =
endpoints.GUILD_MEMBER(guildId, id), (await rest.runMethod(
)) as MemberCreatePayload; "get",
endpoints.GUILD_MEMBER(guildId, id),
)) as MemberCreatePayload;
const memberStruct = await structures.createMemberStruct(data, guildId); const memberStruct = await structures.createMemberStruct(data, guildId);
await cacheHandlers.set("members", memberStruct.id, memberStruct); await cacheHandlers.set("members", memberStruct.id, memberStruct);
+10 -14
View File
@@ -2,6 +2,9 @@ import { identifyPayload } from "../../bot.ts";
import { cacheHandlers } from "../../cache.ts"; import { cacheHandlers } from "../../cache.ts";
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { Member, structures } from "../../structures/mod.ts"; import { Member, structures } from "../../structures/mod.ts";
import { DiscordGatewayIntents } from "../../types/gateway/gateway_intents.ts";
import { DiscordGuildMember } from "../../types/guilds/guild_member.ts";
import { Errors } from "../../types/misc/errors.ts";
import { Collection } from "../../util/collection.ts"; import { Collection } from "../../util/collection.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
@@ -14,7 +17,7 @@ import { endpoints } from "../../util/constants.ts";
* GW(fetchMembers): 120/m(PER shard) rate limit. Meaning if you have 8 shards your limit is 960/m. * GW(fetchMembers): 120/m(PER shard) rate limit. Meaning if you have 8 shards your limit is 960/m.
*/ */
export async function getMembers(guildId: string, options?: GetMemberOptions) { export async function getMembers(guildId: string, options?: GetMemberOptions) {
if (!(identifyPayload.intents && Intents.GUILD_MEMBERS)) { if (!(identifyPayload.intents && DiscordGatewayIntents.GUILD_MEMBERS)) {
throw new Error(Errors.MISSING_INTENT_GUILD_MEMBERS); throw new Error(Errors.MISSING_INTENT_GUILD_MEMBERS);
} }
@@ -39,19 +42,12 @@ export async function getMembers(guildId: string, options?: GetMemberOptions) {
); );
} }
const result = const result = (await rest.runMethod(
(await rest.runMethod( "get",
"get", `${endpoints.GUILD_MEMBERS(guildId)}?limit=${
`${endpoints.GUILD_MEMBERS(guildId)}?limit=${ membersLeft > 1000 ? 1000 : membersLeft
membersLeft > 1000 }${options?.after ? `&after=${options.after}` : ""}`,
? 1000 )) as DiscordGuildMember[];
: membersLeft
}${
options?.after
? `&after=${options.after}`
: ""
}`,
)) as MemberCreatePayload[];
const memberStructures = await Promise.all( const memberStructures = await Promise.all(
result.map(async (member) => { result.map(async (member) => {
+1
View File
@@ -1,5 +1,6 @@
import { botId } from "../../bot.ts"; import { botId } from "../../bot.ts";
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { Errors } from "../../types/misc/errors.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
import { import {
highestRole, highestRole,
+1
View File
@@ -1,4 +1,5 @@
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { Errors } from "../../types/misc/errors.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
import { requireBotGuildPermissions } from "../../util/permissions.ts"; import { requireBotGuildPermissions } from "../../util/permissions.ts";
import { camelKeysToSnakeCase } from "../../util/utils.ts"; import { camelKeysToSnakeCase } from "../../util/utils.ts";
+1
View File
@@ -1,4 +1,5 @@
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { Errors } from "../../types/misc/errors.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
import { requireBotChannelPermissions } from "../../util/permissions.ts"; import { requireBotChannelPermissions } from "../../util/permissions.ts";
+3 -1
View File
@@ -1,6 +1,8 @@
import { botId } from "../../bot.ts"; import { botId } from "../../bot.ts";
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { Message, structures } from "../../structures/mod.ts"; import { Message, structures } from "../../structures/mod.ts";
import { Errors } from "../../types/misc/errors.ts";
import { PermissionStrings } from "../../types/permissions/permission_strings.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
import { requireBotChannelPermissions } from "../../util/permissions.ts"; import { requireBotChannelPermissions } from "../../util/permissions.ts";
@@ -15,7 +17,7 @@ export async function editMessage(
if (typeof content === "string") content = { content }; if (typeof content === "string") content = { content };
const requiredPerms: Permission[] = ["SEND_MESSAGES"]; const requiredPerms: PermissionStrings[] = ["SEND_MESSAGES"];
if (content.tts) requiredPerms.push("SEND_TTS_MESSAGES"); if (content.tts) requiredPerms.push("SEND_TTS_MESSAGES");
+4 -5
View File
@@ -10,11 +10,10 @@ export async function getMessage(channelId: string, id: string) {
"READ_MESSAGE_HISTORY", "READ_MESSAGE_HISTORY",
]); ]);
const result = const result = (await rest.runMethod(
(await rest.runMethod( "get",
"get", endpoints.CHANNEL_MESSAGE(channelId, id),
endpoints.CHANNEL_MESSAGE(channelId, id), )) as MessageCreateOptions;
)) as MessageCreateOptions;
return structures.createMessageStruct(result); return structures.createMessageStruct(result);
} }
+5 -6
View File
@@ -19,12 +19,11 @@ export async function getMessages(
if (options?.limit && options.limit > 100) return; if (options?.limit && options.limit > 100) return;
const result = const result = (await rest.runMethod(
(await rest.runMethod( "get",
"get", endpoints.CHANNEL_MESSAGES(channelId),
endpoints.CHANNEL_MESSAGES(channelId), options,
options, )) as MessageCreateOptions[];
)) as MessageCreateOptions[];
return Promise.all( return Promise.all(
result.map((res) => structures.createMessageStruct(res)), result.map((res) => structures.createMessageStruct(res)),
+5 -6
View File
@@ -9,12 +9,11 @@ export async function getReactions(
reaction: string, reaction: string,
options?: DiscordGetReactionsParams, options?: DiscordGetReactionsParams,
) { ) {
const users = const users = (await rest.runMethod(
(await rest.runMethod( "get",
"get", endpoints.CHANNEL_MESSAGE_REACTION(channelId, messageId, reaction),
endpoints.CHANNEL_MESSAGE_REACTION(channelId, messageId, reaction), options,
options, )) as UserPayload[];
)) as UserPayload[];
return new Collection(users.map((user) => [user.id, user])); return new Collection(users.map((user) => [user.id, user]));
} }
+4 -5
View File
@@ -4,11 +4,10 @@ import { endpoints } from "../../util/constants.ts";
/** Crosspost a message in a News Channel to following channels. */ /** Crosspost a message in a News Channel to following channels. */
export async function publishMessage(channelId: string, messageId: string) { export async function publishMessage(channelId: string, messageId: string) {
const data = const data = (await rest.runMethod(
(await rest.runMethod( "post",
"post", endpoints.CHANNEL_MESSAGE_CROSSPOST(channelId, messageId),
endpoints.CHANNEL_MESSAGE_CROSSPOST(channelId, messageId), )) as MessageCreateOptions;
)) as MessageCreateOptions;
return structures.createMessageStruct(data); return structures.createMessageStruct(data);
} }
+2 -1
View File
@@ -2,7 +2,8 @@ import { cacheHandlers } from "../../cache.ts";
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { structures } from "../../structures/mod.ts"; import { structures } from "../../structures/mod.ts";
import { DiscordChannelTypes } from "../../types/channels/channel_types.ts"; import { DiscordChannelTypes } from "../../types/channels/channel_types.ts";
import { PermissionStrings } from "../../types/mod.ts"; import { Errors } from "../../types/misc/errors.ts";
import { PermissionStrings } from "../../types/permissions/permission_strings.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
import { requireBotChannelPermissions } from "../../util/permissions.ts"; import { requireBotChannelPermissions } from "../../util/permissions.ts";
+1
View File
@@ -1,5 +1,6 @@
import { botId } from "../../bot.ts"; import { botId } from "../../bot.ts";
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { Errors } from "../../types/misc/errors.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
import { import {
isHigherPosition, isHigherPosition,
+1
View File
@@ -1,5 +1,6 @@
import { botId } from "../../bot.ts"; import { botId } from "../../bot.ts";
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { Errors } from "../../types/misc/errors.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
import { import {
isHigherPosition, isHigherPosition,
@@ -23,12 +23,11 @@ export async function createGuildTemplate(
throw new Error("The description can only be in between 0-120 characters."); throw new Error("The description can only be in between 0-120 characters.");
} }
const template = const template = (await rest.runMethod(
(await rest.runMethod( "post",
"post", endpoints.GUILD_TEMPLATES(guildId),
endpoints.GUILD_TEMPLATES(guildId), data,
data, )) as GuildTemplate;
)) as GuildTemplate;
return structures.createTemplateStruct(template); return structures.createTemplateStruct(template);
} }
@@ -13,11 +13,10 @@ export async function deleteGuildTemplate(
) { ) {
await requireBotGuildPermissions(guildId, ["MANAGE_GUILD"]); await requireBotGuildPermissions(guildId, ["MANAGE_GUILD"]);
const deletedTemplate = const deletedTemplate = (await rest.runMethod(
(await rest.runMethod( "delete",
"delete", `${endpoints.GUILD_TEMPLATES(guildId)}/${templateCode}`,
`${endpoints.GUILD_TEMPLATES(guildId)}/${templateCode}`, )) as GuildTemplate;
)) as GuildTemplate;
return structures.createTemplateStruct(deletedTemplate); return structures.createTemplateStruct(deletedTemplate);
} }
+5 -6
View File
@@ -22,12 +22,11 @@ export async function editGuildTemplate(
throw new Error("The description can only be in between 0-120 characters."); throw new Error("The description can only be in between 0-120 characters.");
} }
const template = const template = (await rest.runMethod(
(await rest.runMethod( "patch",
"patch", `${endpoints.GUILD_TEMPLATES(guildId)}/${templateCode}`,
`${endpoints.GUILD_TEMPLATES(guildId)}/${templateCode}`, data,
data, )) as GuildTemplate;
)) as GuildTemplate;
return structures.createTemplateStruct(template); return structures.createTemplateStruct(template);
} }
+4 -5
View File
@@ -10,11 +10,10 @@ import { requireBotGuildPermissions } from "../../util/permissions.ts";
export async function getGuildTemplates(guildId: string) { export async function getGuildTemplates(guildId: string) {
await requireBotGuildPermissions(guildId, ["MANAGE_GUILD"]); await requireBotGuildPermissions(guildId, ["MANAGE_GUILD"]);
const templates = const templates = (await rest.runMethod(
(await rest.runMethod( "get",
"get", endpoints.GUILD_TEMPLATES(guildId),
endpoints.GUILD_TEMPLATES(guildId), )) as GuildTemplate[];
)) as GuildTemplate[];
return templates.map((template) => structures.createTemplateStruct(template)); return templates.map((template) => structures.createTemplateStruct(template));
} }
+4 -5
View File
@@ -4,11 +4,10 @@ import { endpoints } from "../../util/constants.ts";
/** Returns the guild template if it exists */ /** Returns the guild template if it exists */
export async function getTemplate(templateCode: string) { export async function getTemplate(templateCode: string) {
const result = const result = (await rest.runMethod(
(await rest.runMethod( "get",
"get", endpoints.GUILD_TEMPLATE(templateCode),
endpoints.GUILD_TEMPLATE(templateCode), ) as GuildTemplate);
) as GuildTemplate);
const template = await structures.createTemplateStruct(result); const template = await structures.createTemplateStruct(result);
return template; return template;
+4 -5
View File
@@ -10,11 +10,10 @@ import { requireBotGuildPermissions } from "../../util/permissions.ts";
export async function syncGuildTemplate(guildId: string, templateCode: string) { export async function syncGuildTemplate(guildId: string, templateCode: string) {
await requireBotGuildPermissions(guildId, ["MANAGE_GUILD"]); await requireBotGuildPermissions(guildId, ["MANAGE_GUILD"]);
const template = const template = (await rest.runMethod(
(await rest.runMethod( "put",
"put", `${endpoints.GUILD_TEMPLATES(guildId)}/${templateCode}`,
`${endpoints.GUILD_TEMPLATES(guildId)}/${templateCode}`, )) as GuildTemplate;
)) as GuildTemplate;
return structures.createTemplateStruct(template); return structures.createTemplateStruct(template);
} }
+1
View File
@@ -1,4 +1,5 @@
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { Errors } from "../../types/misc/errors.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
import { requireBotChannelPermissions } from "../../util/permissions.ts"; import { requireBotChannelPermissions } from "../../util/permissions.ts";
import { urlToBase64 } from "../../util/utils.ts"; import { urlToBase64 } from "../../util/utils.ts";
@@ -1,5 +1,6 @@
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { structures } from "../../structures/mod.ts"; import { structures } from "../../structures/mod.ts";
import { Errors } from "../../types/misc/errors.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
export async function editWebhookMessage( export async function editWebhookMessage(
+1
View File
@@ -1,5 +1,6 @@
import { rest } from "../../rest/rest.ts"; import { rest } from "../../rest/rest.ts";
import { structures } from "../../structures/mod.ts"; import { structures } from "../../structures/mod.ts";
import { Errors } from "../../types/misc/errors.ts";
import { endpoints } from "../../util/constants.ts"; import { endpoints } from "../../util/constants.ts";
/** Execute a webhook with webhook Id and webhook token */ /** Execute a webhook with webhook Id and webhook token */
+5 -1
View File
@@ -90,7 +90,11 @@ async function handleApplicationCommand(
} }
/** Internal function to verify security. Discord will send bad and good data and this function is important to verify it. If it is not verified properly, Discord will kill your bot. */ /** Internal function to verify security. Discord will send bad and good data and this function is important to verify it. If it is not verified properly, Discord will kill your bot. */
export function verifySecurity(buffer: Uint8Array, signature: string, time: string) { export function verifySecurity(
buffer: Uint8Array,
signature: string,
time: string,
) {
const sig = new Uint8Array(64); const sig = new Uint8Array(64);
const timestamp = new TextEncoder().encode(time); const timestamp = new TextEncoder().encode(time);
+1
View File
@@ -22,6 +22,7 @@ export const rest = {
console.error(error); console.error(error);
}, },
// PLACEHOLDERS TO ALLOW USERS TO CUSTOMIZE // PLACEHOLDERS TO ALLOW USERS TO CUSTOMIZE
debug: function (_type, error) {},
fetching() {}, fetching() {},
fetched() {}, fetched() {},
fetchSuccess() {}, fetchSuccess() {},
+63 -42
View File
@@ -1,18 +1,23 @@
import { Errors } from "../types/misc/errors.ts";
import { IMAGE_BASE_URL } from "../util/constants.ts";
import { API_VERSION } from "../util/constants.ts";
import { BASE_URL } from "../util/constants.ts";
import { rest } from "./rest.ts"; import { rest } from "./rest.ts";
export function runMethod( export function runMethod(
method: RequestMethods, method: "get" | "post" | "put" | "delete" | "patch",
url: string, url: string,
body?: unknown, body?: unknown,
retryCount = 0, retryCount = 0,
bucketId?: string | null, bucketId?: string | null,
) { ) {
rest.eventHandlers.debug?.( rest.eventHandlers.debug?.("requestCreate", {
{ method,
type: "requestCreate", url,
data: { method, url, body, retryCount, bucketId }, body,
}, retryCount,
); bucketId,
});
const errorStack = new Error("Location:"); const errorStack = new Error("Location:");
Error.captureStackTrace(errorStack); Error.captureStackTrace(errorStack);
@@ -45,38 +50,49 @@ export function runMethod(
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
const callback = async () => { const callback = async () => {
try { try {
const rateLimitResetIn = await rest.checkRatelimits(url); const rateLimitResetIn = rest.checkRateLimits(url);
if (rateLimitResetIn) { if (rateLimitResetIn) {
return { rateLimited: rateLimitResetIn, beforeFetch: true, bucketId }; return { rateLimited: rateLimitResetIn, beforeFetch: true, bucketId };
} }
const query = method === "get" && body const query = method === "get" && body
? // deno-lint-ignore no-explicit-any ? // deno-lint-ignore no-explicit-any
Object.entries(body as any).map(([key, value]) => Object.entries(body as any)
// deno-lint-ignore no-explicit-any .map(
`${encodeURIComponent(key)}=${encodeURIComponent(value as any)}` ([key, value]) =>
) `${encodeURIComponent(key)}=${
encodeURIComponent(
value as string | number | boolean,
)
}`,
)
.join("&") .join("&")
: ""; : "";
const urlToUse = method === "get" && query ? `${url}?${query}` : url; const urlToUse = method === "get" && query ? `${url}?${query}` : url;
rest.eventHandlers.debug?.( rest.eventHandlers.debug?.("requestFetch", {
{ method,
type: "requestFetch", url,
data: { method, url, body, retryCount, bucketId }, body,
}, retryCount,
); bucketId,
});
const response = await fetch( const response = await fetch(
urlToUse, urlToUse,
rest.createRequestBody(body, method), rest.createRequestBody(body, method),
); );
rest.eventHandlers.debug?.( rest.eventHandlers.debug?.("requestFetched", {
{ method,
type: "requestFetched", url,
data: { method, url, body, retryCount, bucketId, response }, body,
}, retryCount,
bucketId,
response,
});
const bucketIdFromHeaders = rest.processRequestHeaders(
url,
response.headers,
); );
const bucketIdFromHeaders = rest.processHeaders(url, response.headers);
await rest.handleStatusCode(response, errorStack); await rest.handleStatusCode(response, errorStack);
// Sometimes Discord returns an empty 204 response that can't be made to JSON. // Sometimes Discord returns an empty 204 response that can't be made to JSON.
@@ -88,12 +104,14 @@ export function runMethod(
json.message === "You are being rate limited." json.message === "You are being rate limited."
) { ) {
if (retryCount > 10) { if (retryCount > 10) {
rest.eventHandlers.debug?.( rest.eventHandlers.error?.("globalRateLimit", {
{ method,
type: "error", url,
data: { method, url, body, retryCount, bucketId, errorStack }, body,
}, retryCount,
); bucketId,
errorStack,
});
throw new Error(Errors.RATE_LIMIT_RETRY_MAXED); throw new Error(Errors.RATE_LIMIT_RETRY_MAXED);
} }
@@ -104,20 +122,23 @@ export function runMethod(
}; };
} }
rest.eventHandlers.debug?.( rest.eventHandlers.debug?.("requestSuccess", {
{ method,
type: "requestSuccess", url,
data: { method, url, body, retryCount, bucketId }, body,
}, retryCount,
); bucketId,
});
return resolve(json); return resolve(json);
} catch (error) { } catch (error) {
rest.eventHandlers.debug?.( rest.eventHandlers.error?.("unknown", {
{ method,
type: "error", url,
data: { method, url, body, retryCount, bucketId, errorStack }, body,
}, retryCount,
); bucketId,
errorStack,
});
return reject(error); return reject(error);
} }
}; };
+1 -1
View File
@@ -16,7 +16,7 @@ export interface Identify {
/** Presence structure for initial presence information */ /** Presence structure for initial presence information */
presence?: UpdateStatus; presence?: UpdateStatus;
/** Enables dispatching of guild subscription events (presence and typing events) */ /** Enables dispatching of guild subscription events (presence and typing events) */
guild_subscriptions?: boolean; guildSubscriptions?: boolean;
/** The Gateway Intents you wish to receive */ /** The Gateway Intents you wish to receive */
intents: number; intents: number;
} }
-1
View File
@@ -1,4 +1,3 @@
export interface ListGuildMembers { export interface ListGuildMembers {
/** Max number of members to return (1-1000). Default: 1 */ /** Max number of members to return (1-1000). Default: 1 */
limit?: number; limit?: number;
+1
View File
@@ -1,5 +1,6 @@
import { SnakeCaseProps } from "../util.ts"; import { SnakeCaseProps } from "../util.ts";
import { DiscordVisibilityTypes } from "./visibility_types.ts"; import { DiscordVisibilityTypes } from "./visibility_types.ts";
import { Integration } from "../guilds/integration.ts"
export interface Connection { export interface Connection {
/** id of the connection account */ /** id of the connection account */
+31 -35
View File
@@ -1,15 +1,11 @@
import { botId } from "../bot.ts"; import { botId } from "../bot.ts";
import { cacheHandlers } from "../cache.ts"; import { cacheHandlers } from "../cache.ts";
import { Channel, Guild, Member, Role } from "../structures/mod.ts"; import { Channel, Guild, Member, Role } from "../structures/mod.ts";
import { import { Errors } from "../types/misc/errors.ts";
DiscordBitwisePermissionFlags, import { DiscordBitwisePermissionFlags } from "../types/permissions/bitwise_permission_flags.ts";
PermissionStrings, import { PermissionStrings } from "../types/permissions/permission_strings.ts";
} from "../types/mod.ts";
async function getCached( async function getCached(table: "guilds", key: string | Guild): Promise<Guild>;
table: "guilds",
key: string | Guild,
): Promise<Guild>;
async function getCached( async function getCached(
table: "channels", table: "channels",
key: string | Channel, key: string | Channel,
@@ -24,7 +20,7 @@ async function getCached(
) { ) {
const cached = typeof key === "string" const cached = typeof key === "string"
? // @ts-ignore TS is wrong here ? // @ts-ignore TS is wrong here
(await cacheHandlers.get(table, key)) await cacheHandlers.get(table, key)
: key; : key;
if (!cached || typeof cached === "string") { if (!cached || typeof cached === "string") {
throw new Error( throw new Error(
@@ -119,14 +115,15 @@ export async function calculateChannelOverwrites(
/** Checks if the given permission bits are matching the given permissions. `ADMINISTRATOR` always returns `true` */ /** Checks if the given permission bits are matching the given permissions. `ADMINISTRATOR` always returns `true` */
export function validatePermissions( export function validatePermissions(
permissionBits: string, permissionBits: string,
permissions: Permission[], permissions: PermissionStrings[],
) { ) {
if (BigInt(permissionBits) & 8n) return true; if (BigInt(permissionBits) & 8n) return true;
return permissions.every( return permissions.every(
(permission) => (permission) =>
// Check if permission is in permissionBits // Check if permission is in permissionBits
BigInt(permissionBits) & BigInt(Permissions[permission]), BigInt(permissionBits) &
BigInt(DiscordBitwisePermissionFlags[permission]),
); );
} }
@@ -134,7 +131,7 @@ export function validatePermissions(
export async function hasGuildPermissions( export async function hasGuildPermissions(
guild: string | Guild, guild: string | Guild,
member: string | Member, member: string | Member,
permissions: Permission[], permissions: PermissionStrings[],
) { ) {
// First we need the role permission bits this member has // First we need the role permission bits this member has
const basePermissions = await calculateBasePermissions(guild, member); const basePermissions = await calculateBasePermissions(guild, member);
@@ -145,7 +142,7 @@ export async function hasGuildPermissions(
/** Checks if the bot has these permissions in the given guild */ /** Checks if the bot has these permissions in the given guild */
export function botHasGuildPermissions( export function botHasGuildPermissions(
guild: string | Guild, guild: string | Guild,
permissions: Permission[], permissions: PermissionStrings[],
) { ) {
// Since Bot is a normal member we can use the hasRolePermissions() function // Since Bot is a normal member we can use the hasRolePermissions() function
return hasGuildPermissions(guild, botId, permissions); return hasGuildPermissions(guild, botId, permissions);
@@ -155,13 +152,10 @@ export function botHasGuildPermissions(
export async function hasChannelPermissions( export async function hasChannelPermissions(
channel: string | Channel, channel: string | Channel,
member: string | Member, member: string | Member,
permissions: Permission[], permissions: PermissionStrings[],
) { ) {
// First we need the overwrite bits this member has // First we need the overwrite bits this member has
const channelOverwrites = await calculateChannelOverwrites( const channelOverwrites = await calculateChannelOverwrites(channel, member);
channel,
member,
);
// Second use the validatePermissions function to check if the member has every permission // Second use the validatePermissions function to check if the member has every permission
return validatePermissions(channelOverwrites, permissions); return validatePermissions(channelOverwrites, permissions);
} }
@@ -169,7 +163,7 @@ export async function hasChannelPermissions(
/** Checks if the bot has these permissions f0r the given channel */ /** Checks if the bot has these permissions f0r the given channel */
export function botHasChannelPermissions( export function botHasChannelPermissions(
channel: string | Channel, channel: string | Channel,
permissions: Permission[], permissions: PermissionStrings[],
) { ) {
// Since Bot is a normal member we can use the hasRolePermissions() function // Since Bot is a normal member we can use the hasRolePermissions() function
return hasChannelPermissions(channel, botId, permissions); return hasChannelPermissions(channel, botId, permissions);
@@ -184,8 +178,10 @@ export function missingPermissions(
return permissions.filter( return permissions.filter(
(permission) => (permission) =>
!(BigInt(permissionBits) & !(
BigInt(DiscordBitwisePermissionFlags[permission])), BigInt(permissionBits) &
BigInt(DiscordBitwisePermissionFlags[permission])
),
); );
} }
@@ -193,7 +189,7 @@ export function missingPermissions(
export async function getMissingGuildPermissions( export async function getMissingGuildPermissions(
guild: string | Guild, guild: string | Guild,
member: string | Member, member: string | Member,
permissions: Permission[], permissions: PermissionStrings[],
) { ) {
// First we need the role permissino bits this member has // First we need the role permissino bits this member has
const permissionBits = await calculateBasePermissions(guild, member); const permissionBits = await calculateBasePermissions(guild, member);
@@ -205,7 +201,7 @@ export async function getMissingGuildPermissions(
export async function getMissingChannelPermissions( export async function getMissingChannelPermissions(
channel: string | Channel, channel: string | Channel,
member: string | Member, member: string | Member,
permissions: Permission[], permissions: PermissionStrings[],
) { ) {
// First we need the role permissino bits this member has // First we need the role permissino bits this member has
const permissionBits = await calculateChannelOverwrites(channel, member); const permissionBits = await calculateChannelOverwrites(channel, member);
@@ -217,7 +213,7 @@ export async function getMissingChannelPermissions(
export async function requireGuildPermissions( export async function requireGuildPermissions(
guild: string | Guild, guild: string | Guild,
member: string | Member, member: string | Member,
permissions: Permission[], permissions: PermissionStrings[],
) { ) {
const missing = await getMissingGuildPermissions(guild, member, permissions); const missing = await getMissingGuildPermissions(guild, member, permissions);
if (missing.length) { if (missing.length) {
@@ -229,7 +225,7 @@ export async function requireGuildPermissions(
/** Throws an error if the bot does not have all permissions */ /** Throws an error if the bot does not have all permissions */
export function requireBotGuildPermissions( export function requireBotGuildPermissions(
guild: string | Guild, guild: string | Guild,
permissions: Permission[], permissions: PermissionStrings[],
) { ) {
// Since Bot is a normal member we can use the throwOnMissingGuildPermission() function // Since Bot is a normal member we can use the throwOnMissingGuildPermission() function
return requireGuildPermissions(guild, botId, permissions); return requireGuildPermissions(guild, botId, permissions);
@@ -239,7 +235,7 @@ export function requireBotGuildPermissions(
export async function requireChannelPermissions( export async function requireChannelPermissions(
channel: string | Channel, channel: string | Channel,
member: string | Member, member: string | Member,
permissions: Permission[], permissions: PermissionStrings[],
) { ) {
const missing = await getMissingChannelPermissions( const missing = await getMissingChannelPermissions(
channel, channel,
@@ -255,7 +251,7 @@ export async function requireChannelPermissions(
/** Throws an error if the bot has not all of the given channel permissions */ /** Throws an error if the bot has not all of the given channel permissions */
export function requireBotChannelPermissions( export function requireBotChannelPermissions(
channel: string | Channel, channel: string | Channel,
permissions: Permission[], permissions: PermissionStrings[],
) { ) {
// Since Bot is a normal member we can use the throwOnMissingChannelPermission() function // Since Bot is a normal member we can use the throwOnMissingChannelPermission() function
return requireChannelPermissions(channel, botId, permissions); return requireChannelPermissions(channel, botId, permissions);
@@ -263,19 +259,20 @@ export function requireBotChannelPermissions(
/** This function converts a bitwise string to permission strings */ /** This function converts a bitwise string to permission strings */
export function calculatePermissions(permissionBits: bigint) { export function calculatePermissions(permissionBits: bigint) {
return Object.keys(Permissions).filter((permission) => { return Object.keys(DiscordBitwisePermissionFlags).filter((permission) => {
// Since Object.keys() not only returns the permission names but also the bit values we need to return false if it is a Number // Since Object.keys() not only returns the permission names but also the bit values we need to return false if it is a Number
if (Number(permission)) return false; if (Number(permission)) return false;
// Check if permissionBits has this permission // Check if permissionBits has this permission
return permissionBits & BigInt(Permissions[permission as Permission]); return permissionBits &
}) as Permission[]; BigInt(DiscordBitwisePermissionFlags[permission as PermissionStrings]);
}) as PermissionStrings[];
} }
/** This function converts an array of permissions into the bitwise string. */ /** This function converts an array of permissions into the bitwise string. */
export function calculateBits(permissions: Permission[]) { export function calculateBits(permissions: PermissionStrings[]) {
return permissions return permissions
.reduce((bits, perm) => { .reduce((bits, perm) => {
bits |= BigInt(Permissions[perm]); bits |= BigInt(DiscordBitwisePermissionFlags[perm]);
return bits; return bits;
}, 0n) }, 0n)
.toString(); .toString();
@@ -289,9 +286,8 @@ export async function highestRole(
guild = await getCached("guilds", guild); guild = await getCached("guilds", guild);
// Get the roles from the member // Get the roles from the member
const memberRoles = ( const memberRoles = (await getCached("members", member)).guilds.get(guild.id)
await getCached("members", member) ?.roles;
).guilds.get(guild.id)?.roles;
// This member has no roles so the highest one is the @everyone role // This member has no roles so the highest one is the @everyone role
if (!memberRoles) return guild.roles.get(guild.id) as Role; if (!memberRoles) return guild.roles.get(guild.id) as Role;
+2 -1
View File
@@ -1,5 +1,6 @@
import { encode } from "../../deps.ts"; import { encode } from "../../deps.ts";
import { DiscordGatewayOpcodes } from "../types/mod.ts"; import { DiscordGatewayOpcodes } from "../types/codes/gateway_opcodes.ts";
import { Errors } from "../types/misc/errors.ts";
import { basicShards, sendWS } from "../ws/shard.ts"; import { basicShards, sendWS } from "../ws/shard.ts";
import { SLASH_COMMANDS_NAME_REGEX } from "./constants.ts"; import { SLASH_COMMANDS_NAME_REGEX } from "./constants.ts";
+1 -1
View File
@@ -2,7 +2,7 @@ import { eventHandlers } from "../bot.ts";
import { cache } from "../cache.ts"; import { cache } from "../cache.ts";
import { handlers } from "../handlers/mod.ts"; import { handlers } from "../handlers/mod.ts";
import { Member } from "../structures/mod.ts"; import { Member } from "../structures/mod.ts";
import { DiscordGatewayOpcodes } from "../types/mod.ts"; import { DiscordGatewayOpcodes } from "../types/codes/gateway_opcodes.ts";
import { Collection } from "../util/collection.ts"; import { Collection } from "../util/collection.ts";
import { delay } from "../util/utils.ts"; import { delay } from "../util/utils.ts";
import { createShard, requestGuildMembers } from "./mod.ts"; import { createShard, requestGuildMembers } from "./mod.ts";