mirror of
https://github.com/discordeno/discordeno.git
synced 2026-06-03 09:20:08 +00:00
Merge branch 'node-migration' of https://github.com/discordeno/discordeno into node-migration
This commit is contained in:
@@ -2,8 +2,8 @@
|
||||
|
||||
import type { BigString, DiscordGuild } from '@discordeno/types'
|
||||
import { calculateShardId } from '@discordeno/utils'
|
||||
import type { RestManager } from '../../restManager.js'
|
||||
import type { Guild } from '../../transformers/guild.js'
|
||||
import type { Guild } from '../../../../bot/transformers/guild.js'
|
||||
import type { RestManager } from '../../../../rest/src/restManager.js'
|
||||
|
||||
/**
|
||||
* Gets a guild by its ID.
|
||||
@@ -4,7 +4,7 @@
|
||||
import type { AtLeastOne, BigString } from '@discordeno/types'
|
||||
import { GatewayOpcodes } from '@discordeno/types'
|
||||
import { calculateShardId } from '@discordeno/utils'
|
||||
import type { RestManager } from '../../../restManager.js'
|
||||
import type { RestManager } from '../../../../../rest/src/restManager.js'
|
||||
|
||||
/**
|
||||
* Connects the bot user to a voice or stage channel.
|
||||
@@ -4,7 +4,7 @@
|
||||
import type { BigString } from '@discordeno/types'
|
||||
import { GatewayOpcodes } from '@discordeno/types'
|
||||
import { calculateShardId } from '@discordeno/utils'
|
||||
import type { RestManager } from '../../../restManager.js'
|
||||
import type { RestManager } from '../../../../../rest/src/restManager.js'
|
||||
/**
|
||||
* Leaves the voice channel the bot user is currently in.
|
||||
*
|
||||
@@ -4,7 +4,7 @@
|
||||
import type { BigString } from '@discordeno/types'
|
||||
import { GatewayOpcodes } from '@discordeno/types'
|
||||
import { calculateShardId } from '@discordeno/utils'
|
||||
import type { RestManager } from '../../restManager.js'
|
||||
import type { RestManager } from '../../../../rest/src/restManager.js'
|
||||
|
||||
/**
|
||||
* Fetches the list of members for a guild over the gateway.
|
||||
@@ -1,6 +1,6 @@
|
||||
// @ts-nocheck
|
||||
|
||||
import type { RestManager } from '../../restManager.js'
|
||||
import type { RestManager } from '../../../../rest/src/restManager.js'
|
||||
import type { StatusUpdate } from './editShardStatus.js'
|
||||
|
||||
export async function editBotStatus (
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
import type { PresenceStatus } from '@discordeno/types'
|
||||
import { GatewayOpcodes } from '@discordeno/types'
|
||||
import type { RestManager } from '../../restManager.js'
|
||||
import type { Activity } from '../../transformers/activity.js'
|
||||
import type { Activity } from '../../../../bot/transformers/activity.js'
|
||||
import type { RestManager } from '../../../../rest/src/restManager.js'
|
||||
export async function editShardStatus (
|
||||
rest: RestManager,
|
||||
shardId: number,
|
||||
@@ -1,8 +1,8 @@
|
||||
import { routes } from '@discordeno/constant'
|
||||
import type { DiscordGuild } from '@discordeno/types'
|
||||
import { calculateShardId } from '@discordeno/utils'
|
||||
import type { RestManager } from '../../restManager.js'
|
||||
import type { Guild } from '../../transformers/guild.js'
|
||||
import type { Guild } from '../../../../bot/transformers/guild.js'
|
||||
import type { RestManager } from '../../../../rest/src/restManager.js'
|
||||
|
||||
/**
|
||||
* Creates a guild from a template.
|
||||
@@ -1,45 +0,0 @@
|
||||
import type { DiscordActivity, Optionalize } from '@discordeno/types'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformActivity (rest: RestManager, payload: DiscordActivity) {
|
||||
const activity = {
|
||||
name: payload.name,
|
||||
type: payload.type,
|
||||
url: payload.url ?? undefined,
|
||||
createdAt: payload.created_at,
|
||||
startedAt: payload.timestamps?.start,
|
||||
endedAt: payload.timestamps?.end,
|
||||
applicationId: payload.application_id
|
||||
? rest.transformers.snowflake(payload.application_id)
|
||||
: undefined,
|
||||
details: payload.details ?? undefined,
|
||||
state: payload.state ?? undefined,
|
||||
emoji: payload.emoji
|
||||
? {
|
||||
name: payload.emoji.name,
|
||||
animated: payload.emoji.animated,
|
||||
id: payload.emoji.id
|
||||
? rest.transformers.snowflake(payload.emoji.id)
|
||||
: undefined
|
||||
}
|
||||
: undefined,
|
||||
partyId: payload.party?.id,
|
||||
partyCurrentSize: payload.party?.size?.[0],
|
||||
partyMaxSize: payload.party?.size?.[1],
|
||||
largeImage: payload.assets?.large_image,
|
||||
largeText: payload.assets?.large_text,
|
||||
smallImage: payload.assets?.small_image,
|
||||
smallText: payload.assets?.small_text,
|
||||
join: payload.secrets?.join,
|
||||
spectate: payload.secrets?.spectate,
|
||||
match: payload.secrets?.match,
|
||||
instance: payload.instance,
|
||||
flags: payload.flags,
|
||||
buttons: payload.buttons
|
||||
}
|
||||
|
||||
return activity as Optionalize<typeof activity>
|
||||
}
|
||||
|
||||
export interface Activity extends ReturnType<typeof transformActivity> {}
|
||||
@@ -1,44 +0,0 @@
|
||||
import type {
|
||||
DiscordApplication,
|
||||
DiscordUser,
|
||||
Optionalize
|
||||
} from '@discordeno/types'
|
||||
import { iconHashToBigInt } from '@discordeno/utils'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformApplication (
|
||||
rest: RestManager,
|
||||
payload: DiscordApplication
|
||||
) {
|
||||
const application = {
|
||||
name: payload.name,
|
||||
description: payload.description,
|
||||
rpcOrigins: payload.rpc_origins,
|
||||
botPublic: payload.bot_public,
|
||||
botRequireCodeGrant: payload.bot_require_code_grant,
|
||||
termsOfServiceUrl: payload.terms_of_service_url,
|
||||
privacyPolicyUrl: payload.privacy_policy_url,
|
||||
verifyKey: payload.verify_key,
|
||||
primarySkuId: payload.primary_sku_id,
|
||||
slug: payload.slug,
|
||||
coverImage: payload.cover_image
|
||||
? iconHashToBigInt(payload.cover_image)
|
||||
: undefined,
|
||||
flags: payload.flags,
|
||||
|
||||
id: rest.transformers.snowflake(payload.id),
|
||||
icon: payload.icon ? iconHashToBigInt(payload.icon) : undefined,
|
||||
owner: payload.owner
|
||||
? rest.transformers.user(rest, payload.owner as DiscordUser)
|
||||
: undefined,
|
||||
team: payload.team ? rest.transformers.team(rest, payload.team) : undefined,
|
||||
guildId: payload.guild_id
|
||||
? rest.transformers.snowflake(payload.guild_id)
|
||||
: undefined
|
||||
}
|
||||
|
||||
return application as Optionalize<typeof application>
|
||||
}
|
||||
|
||||
export interface Application extends ReturnType<typeof transformApplication> {}
|
||||
@@ -1,35 +0,0 @@
|
||||
import type { DiscordApplicationCommand, Optionalize } from '@discordeno/types'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformApplicationCommand (
|
||||
rest: RestManager,
|
||||
payload: DiscordApplicationCommand
|
||||
) {
|
||||
const applicationCommand = {
|
||||
id: rest.transformers.snowflake(payload.id),
|
||||
applicationId: rest.transformers.snowflake(payload.application_id),
|
||||
guildId: payload.guild_id
|
||||
? rest.transformers.snowflake(payload.guild_id)
|
||||
: undefined,
|
||||
name: payload.name,
|
||||
nameLocalizations: payload.name_localizations ?? undefined,
|
||||
description: payload.description,
|
||||
descriptionLocalizations: payload.description_localizations ?? undefined,
|
||||
defaultMemberPermissions: payload.default_member_permissions
|
||||
? rest.transformers.snowflake(payload.default_member_permissions)
|
||||
: undefined,
|
||||
dmPermission: payload.dm_permission ?? false,
|
||||
type: payload.type,
|
||||
version: payload.version,
|
||||
|
||||
options: payload.options?.map((option) =>
|
||||
rest.transformers.applicationCommandOption(rest, option)
|
||||
)
|
||||
}
|
||||
|
||||
return applicationCommand as Optionalize<typeof applicationCommand>
|
||||
}
|
||||
|
||||
export interface ApplicationCommand
|
||||
extends ReturnType<typeof transformApplicationCommand> {}
|
||||
@@ -1,67 +0,0 @@
|
||||
import type {
|
||||
ApplicationCommandOptionTypes,
|
||||
ChannelTypes,
|
||||
DiscordApplicationCommandOption,
|
||||
Localization
|
||||
} from '@discordeno/types'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
import type { ApplicationCommandOptionChoice } from './applicationCommandOptionChoice.js'
|
||||
|
||||
export function transformApplicationCommandOption (
|
||||
rest: RestManager,
|
||||
payload: DiscordApplicationCommandOption
|
||||
): ApplicationCommandOption {
|
||||
return {
|
||||
type: payload.type,
|
||||
name: payload.name,
|
||||
nameLocalizations: payload.name_localizations ?? undefined,
|
||||
description: payload.description,
|
||||
descriptionLocalizations: payload.description_localizations ?? undefined,
|
||||
required: payload.required ?? false,
|
||||
choices: payload.choices?.map((choice) =>
|
||||
rest.transformers.applicationCommandOptionChoice(rest, choice)
|
||||
),
|
||||
autocomplete: payload.autocomplete,
|
||||
channelTypes: payload.channel_types,
|
||||
minValue: payload.min_value,
|
||||
maxValue: payload.max_value,
|
||||
minLength: payload.min_length,
|
||||
maxLength: payload.max_length,
|
||||
options: payload.options?.map((option) =>
|
||||
rest.transformers.applicationCommandOption(rest, option)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// THIS TRANSFORMER HAS A CIRCULAR REFERENCE TO CALL ITSELF FOR OPTIONS SO AN AUTOMATED TYPE CAN NOT BE CREATED!
|
||||
|
||||
export interface ApplicationCommandOption {
|
||||
/** Value of Application Command Option Type */
|
||||
type: ApplicationCommandOptionTypes
|
||||
/** 1-32 character name matching lowercase `^[\w-]{1,32}$` */
|
||||
name: string
|
||||
/** Localization object for the `name` field. Values follow the same restrictions as `name` */
|
||||
nameLocalizations?: Localization
|
||||
/** 1-100 character description */
|
||||
description: string
|
||||
/** Localization object for the `description` field. Values follow the same restrictions as `description` */
|
||||
descriptionLocalizations?: Localization
|
||||
/** If the parameter is required or optional--default `false` */
|
||||
required?: boolean
|
||||
/** Choices for `string` and `int` types for the user to pick from */
|
||||
choices?: ApplicationCommandOptionChoice[]
|
||||
/** If the option is a subcommand or subcommand group type, this nested options will be the parameters */
|
||||
options?: ApplicationCommandOption[]
|
||||
/** If the option is a channel type, the channels shown will be restricted to these types */
|
||||
channelTypes?: ChannelTypes[]
|
||||
/** Minimum number desired. */
|
||||
minValue?: number
|
||||
/** Maximum number desired. */
|
||||
maxValue?: number
|
||||
/** Minimum length desired. */
|
||||
minLength?: number
|
||||
/** Maximum length desired. */
|
||||
maxLength?: number
|
||||
/** if autocomplete interactions are enabled for this `String`, `Integer`, or `Number` type option */
|
||||
autocomplete?: boolean
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
import type {
|
||||
DiscordApplicationCommandOptionChoice,
|
||||
Optionalize
|
||||
} from '@discordeno/types'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformApplicationCommandOptionChoice (
|
||||
rest: RestManager,
|
||||
payload: DiscordApplicationCommandOptionChoice
|
||||
) {
|
||||
const applicationCommandChoice = {
|
||||
name: payload.name,
|
||||
nameLocalizations: payload.name_localizations ?? undefined,
|
||||
value: payload.value
|
||||
}
|
||||
|
||||
return applicationCommandChoice as Optionalize<
|
||||
typeof applicationCommandChoice
|
||||
>
|
||||
}
|
||||
|
||||
export interface ApplicationCommandOptionChoice
|
||||
extends ReturnType<typeof transformApplicationCommandOptionChoice> {}
|
||||
@@ -1,29 +0,0 @@
|
||||
import type {
|
||||
DiscordGuildApplicationCommandPermissions,
|
||||
Optionalize
|
||||
} from '@discordeno/types'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformApplicationCommandPermission (
|
||||
rest: RestManager,
|
||||
payload: DiscordGuildApplicationCommandPermissions
|
||||
) {
|
||||
const applicationCommandPermission = {
|
||||
id: rest.transformers.snowflake(payload.id),
|
||||
applicationId: rest.transformers.snowflake(payload.application_id),
|
||||
guildId: rest.transformers.snowflake(payload.guild_id),
|
||||
permissions: payload.permissions.map((perm) => ({
|
||||
id: rest.transformers.snowflake(perm.id),
|
||||
type: perm.type,
|
||||
permission: perm.permission
|
||||
}))
|
||||
}
|
||||
|
||||
return applicationCommandPermission as Optionalize<
|
||||
typeof applicationCommandPermission
|
||||
>
|
||||
}
|
||||
|
||||
export interface ApplicationCommandPermission
|
||||
extends ReturnType<typeof transformApplicationCommandPermission> {}
|
||||
@@ -1,25 +0,0 @@
|
||||
import type { DiscordAttachment, Optionalize } from '@discordeno/types'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformAttachment (
|
||||
rest: RestManager,
|
||||
payload: DiscordAttachment
|
||||
) {
|
||||
const attachment = {
|
||||
id: rest.transformers.snowflake(payload.id),
|
||||
filename: payload.filename,
|
||||
contentType: payload.content_type,
|
||||
size: payload.size,
|
||||
url: payload.url,
|
||||
proxyUrl: payload.proxy_url,
|
||||
height: payload.height ?? undefined,
|
||||
width: payload.width ?? undefined,
|
||||
ephemeral: payload.ephemeral,
|
||||
description: payload.description
|
||||
}
|
||||
|
||||
return attachment as Optionalize<typeof attachment>
|
||||
}
|
||||
|
||||
export interface Attachment extends ReturnType<typeof transformAttachment> {}
|
||||
@@ -1,158 +0,0 @@
|
||||
import type { DiscordAuditLogEntry, Optionalize } from '@discordeno/types'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformAuditLogEntry (
|
||||
rest: RestManager,
|
||||
payload: DiscordAuditLogEntry
|
||||
) {
|
||||
const auditLogEntry = {
|
||||
id: rest.transformers.snowflake(payload.id),
|
||||
changes: payload.changes?.map((change) => {
|
||||
switch (change.key) {
|
||||
case '$add':
|
||||
case '$remove':
|
||||
return {
|
||||
key: change.key,
|
||||
new: change.new_value?.map((val) => ({
|
||||
id: val.id ? rest.transformers.snowflake(val.id) : undefined,
|
||||
name: val.name
|
||||
})),
|
||||
old: change.old_value?.map((val) => ({
|
||||
id: val?.id ? rest.transformers.snowflake(val.id) : undefined,
|
||||
name: val?.name
|
||||
}))
|
||||
}
|
||||
case 'discovery_splash_hash':
|
||||
case 'banner_hash':
|
||||
case 'rules_channel_id':
|
||||
case 'public_updates_channel_id':
|
||||
case 'icon_hash':
|
||||
case 'image_hash':
|
||||
case 'splash_hash':
|
||||
case 'owner_id':
|
||||
case 'widget_channel_id':
|
||||
case 'system_channel_id':
|
||||
case 'application_id':
|
||||
case 'permissions':
|
||||
case 'allow':
|
||||
case 'deny':
|
||||
case 'channel_id':
|
||||
case 'inviter_id':
|
||||
case 'avatar_hash':
|
||||
case 'id':
|
||||
return {
|
||||
key: change.key,
|
||||
old: change.old_value
|
||||
? rest.transformers.snowflake(change.old_value)
|
||||
: undefined,
|
||||
new: change.new_value
|
||||
? rest.transformers.snowflake(change.new_value)
|
||||
: undefined
|
||||
}
|
||||
case 'name':
|
||||
case 'description':
|
||||
case 'preferred_locale':
|
||||
case 'region':
|
||||
case 'afk_channel_id':
|
||||
case 'vanity_url_code':
|
||||
case 'topic':
|
||||
case 'code':
|
||||
case 'nick':
|
||||
case 'location':
|
||||
return {
|
||||
key: change.key,
|
||||
old: change.old_value,
|
||||
new: change.new_value
|
||||
}
|
||||
case 'afk_timeout':
|
||||
case 'mfa_level':
|
||||
case 'verification_level':
|
||||
case 'explicit_content_filter':
|
||||
case 'default_message_notifications':
|
||||
case 'prune_delete_days':
|
||||
case 'position':
|
||||
case 'bitrate':
|
||||
case 'rate_limit_per_user':
|
||||
case 'color':
|
||||
case 'max_uses':
|
||||
case 'uses':
|
||||
case 'max_age':
|
||||
case 'expire_behavior':
|
||||
case 'expire_grace_period':
|
||||
case 'user_limit':
|
||||
case 'privacy_level':
|
||||
case 'entity_type':
|
||||
case 'status':
|
||||
return {
|
||||
key: change.key,
|
||||
old: change.old_value ? Number(change.old_value) : undefined,
|
||||
new: change.new_value ? Number(change.new_value) : undefined
|
||||
}
|
||||
case 'widget_enabled':
|
||||
case 'nsfw':
|
||||
case 'hoist':
|
||||
case 'mentionable':
|
||||
case 'temporary':
|
||||
case 'deaf':
|
||||
case 'mute':
|
||||
case 'enable_emoticons':
|
||||
return {
|
||||
key: change.key,
|
||||
old: change.old_value ?? false,
|
||||
new: change.new_value ?? false
|
||||
}
|
||||
case 'permission_overwrites':
|
||||
return {
|
||||
key: change.key,
|
||||
old: change.old_value,
|
||||
new: change.new_value
|
||||
}
|
||||
default:
|
||||
return {
|
||||
key: change.key,
|
||||
old: change.old_value,
|
||||
new: change.new_value
|
||||
}
|
||||
}
|
||||
}),
|
||||
userId: payload.user_id
|
||||
? rest.transformers.snowflake(payload.user_id)
|
||||
: undefined,
|
||||
targetId: payload.target_id
|
||||
? rest.transformers.snowflake(payload.target_id)
|
||||
: undefined,
|
||||
actionType: payload.action_type,
|
||||
options: payload.options
|
||||
? {
|
||||
autoModerationRuleName: payload.options.auto_moderation_rule_name,
|
||||
autoModerationRuleTriggerType:
|
||||
payload.options.auto_moderation_rule_trigger_type,
|
||||
deleteMemberDays: payload.options.delete_member_days
|
||||
? Number(payload.options.delete_member_days)
|
||||
: 0,
|
||||
membersRemoved: payload.options.members_removed
|
||||
? Number(payload.options.members_removed)
|
||||
: 0,
|
||||
channelId: payload.options.channel_id
|
||||
? rest.transformers.snowflake(payload.options.channel_id)
|
||||
: undefined,
|
||||
messageId: payload.options.message_id
|
||||
? rest.transformers.snowflake(payload.options.message_id)
|
||||
: undefined,
|
||||
count: payload.options.count ? Number(payload.options.count) : 0,
|
||||
id: payload.options.id
|
||||
? rest.transformers.snowflake(payload.options.id)
|
||||
: undefined,
|
||||
type: Number(payload.options.type),
|
||||
roleName: payload.options.role_name
|
||||
}
|
||||
: undefined,
|
||||
reason: payload.reason
|
||||
}
|
||||
|
||||
return auditLogEntry as Optionalize<typeof auditLogEntry>
|
||||
}
|
||||
|
||||
export interface AuditLogEntry
|
||||
extends ReturnType<typeof transformAuditLogEntry> {}
|
||||
@@ -1,44 +0,0 @@
|
||||
import type {
|
||||
DiscordAutoModerationActionExecution,
|
||||
Optionalize
|
||||
} from '@discordeno/types'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformAutoModerationActionExecution (
|
||||
rest: RestManager,
|
||||
payload: DiscordAutoModerationActionExecution
|
||||
) {
|
||||
const rule = {
|
||||
content: payload.content,
|
||||
ruleTriggerType: payload.rule_trigger_type,
|
||||
guildId: rest.transformers.snowflake(payload.guild_id),
|
||||
ruleId: rest.transformers.snowflake(payload.rule_id),
|
||||
userId: rest.transformers.snowflake(payload.user_id),
|
||||
channelId: payload.channel_id
|
||||
? rest.transformers.snowflake(payload.channel_id)
|
||||
: undefined,
|
||||
messageId: payload.message_id
|
||||
? rest.transformers.snowflake(payload.message_id)
|
||||
: undefined,
|
||||
alertSystemMessageId: payload.alert_system_message_id
|
||||
? rest.transformers.snowflake(payload.alert_system_message_id)
|
||||
: undefined,
|
||||
matchedKeyword: payload.matched_keyword ?? '',
|
||||
matchedContent: payload.matched_content ?? '',
|
||||
action: {
|
||||
type: payload.action.type,
|
||||
metadata: {
|
||||
durationSeconds: payload.action.metadata.duration_seconds,
|
||||
channelId: payload.action.metadata.channel_id
|
||||
? rest.transformers.snowflake(payload.action.metadata.channel_id)
|
||||
: undefined
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return rule as Optionalize<typeof rule>
|
||||
}
|
||||
|
||||
export interface AutoModerationActionExecution
|
||||
extends ReturnType<typeof transformAutoModerationActionExecution> {}
|
||||
@@ -1,48 +0,0 @@
|
||||
import type { DiscordAutoModerationRule, Optionalize } from '@discordeno/types'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformAutoModerationRule (
|
||||
rest: RestManager,
|
||||
payload: DiscordAutoModerationRule
|
||||
) {
|
||||
const rule = {
|
||||
name: payload.name,
|
||||
eventType: payload.event_type,
|
||||
triggerType: payload.trigger_type,
|
||||
enabled: payload.enabled,
|
||||
id: rest.transformers.snowflake(payload.id),
|
||||
guildId: rest.transformers.snowflake(payload.guild_id),
|
||||
creatorId: rest.transformers.snowflake(payload.creator_id),
|
||||
exemptRoles: payload.exempt_roles.map((id) =>
|
||||
rest.transformers.snowflake(id)
|
||||
),
|
||||
exemptChannels: payload.exempt_channels.map((id) =>
|
||||
rest.transformers.snowflake(id)
|
||||
),
|
||||
triggerMetadata: payload.trigger_metadata
|
||||
? {
|
||||
keywordFilter: payload.trigger_metadata.keyword_filter,
|
||||
presets: payload.trigger_metadata.presets,
|
||||
allowList: payload.trigger_metadata.allow_list,
|
||||
mentionTotalLimit: payload.trigger_metadata.mention_total_limit
|
||||
}
|
||||
: undefined,
|
||||
actions: payload.actions.map((action) => ({
|
||||
type: action.type,
|
||||
metadata: action.metadata
|
||||
? {
|
||||
channelId: action.metadata.channel_id
|
||||
? rest.transformers.snowflake(action.metadata.channel_id)
|
||||
: undefined,
|
||||
durationSeconds: action.metadata.duration_seconds
|
||||
}
|
||||
: undefined
|
||||
}))
|
||||
}
|
||||
|
||||
return rule as Optionalize<typeof rule>
|
||||
}
|
||||
|
||||
export interface AutoModerationRule
|
||||
extends ReturnType<typeof transformAutoModerationRule> {}
|
||||
@@ -1,103 +0,0 @@
|
||||
import type { DiscordChannel, Optionalize } from '@discordeno/types'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
|
||||
const Mask = (1n << 64n) - 1n
|
||||
|
||||
export function packOverwrites (
|
||||
allow: string,
|
||||
deny: string,
|
||||
id: string,
|
||||
type: number
|
||||
): bigint {
|
||||
return pack64(allow, 0) | pack64(deny, 1) | pack64(id, 2) | pack64(type, 3)
|
||||
}
|
||||
function unpack64 (v: bigint, shift: number): bigint {
|
||||
return (v >> BigInt(shift * 64)) & Mask
|
||||
}
|
||||
function pack64 (v: string | number, shift: number): bigint {
|
||||
const b = BigInt(v)
|
||||
if (b < 0 || b > Mask) {
|
||||
throw new Error(`should have been a 64 bit unsigned integer: ${v}`)
|
||||
}
|
||||
return b << BigInt(shift * 64)
|
||||
}
|
||||
export function separateOverwrites (
|
||||
v: bigint
|
||||
): [number, bigint, bigint, bigint] {
|
||||
return [
|
||||
Number(unpack64(v, 3)),
|
||||
unpack64(v, 2),
|
||||
unpack64(v, 0),
|
||||
unpack64(v, 1)
|
||||
] as [number, bigint, bigint, bigint]
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformChannel (
|
||||
rest: RestManager,
|
||||
payload: { channel: DiscordChannel } & { guildId?: bigint }
|
||||
) {
|
||||
const channel = {
|
||||
// UNTRANSFORMED STUFF HERE
|
||||
type: payload.channel.type,
|
||||
position: payload.channel.position,
|
||||
name: payload.channel.name,
|
||||
topic: payload.channel.topic ?? undefined,
|
||||
nsfw: payload.channel.nsfw,
|
||||
bitrate: payload.channel.bitrate,
|
||||
userLimit: payload.channel.user_limit,
|
||||
rateLimitPerUser: payload.channel.rate_limit_per_user,
|
||||
// recipients: payload.channel.recipients?.map((r) => rest.transformers.user(rest, r)),
|
||||
rtcRegion: payload.channel.rtc_region ?? undefined,
|
||||
videoQualityMode: payload.channel.video_quality_mode,
|
||||
guildId:
|
||||
payload.guildId ??
|
||||
(payload.channel.guild_id
|
||||
? rest.transformers.snowflake(payload.channel.guild_id)
|
||||
: 0n),
|
||||
lastPinTimestamp: payload.channel.last_pin_timestamp
|
||||
? Date.parse(payload.channel.last_pin_timestamp)
|
||||
: undefined,
|
||||
permissionOverwrites: payload.channel.permission_overwrites
|
||||
? payload.channel.permission_overwrites.map((o) =>
|
||||
packOverwrites(o.allow ?? '0', o.deny ?? '0', o.id, o.type)
|
||||
)
|
||||
: [],
|
||||
|
||||
id: rest.transformers.snowflake(payload.channel.id),
|
||||
permissions: payload.channel.permissions
|
||||
? rest.transformers.snowflake(payload.channel.permissions)
|
||||
: undefined,
|
||||
lastMessageId: payload.channel.last_message_id
|
||||
? rest.transformers.snowflake(payload.channel.last_message_id)
|
||||
: undefined,
|
||||
ownerId: payload.channel.owner_id
|
||||
? rest.transformers.snowflake(payload.channel.owner_id)
|
||||
: undefined,
|
||||
applicationId: payload.channel.application_id
|
||||
? rest.transformers.snowflake(payload.channel.application_id)
|
||||
: undefined,
|
||||
parentId: payload.channel.parent_id
|
||||
? rest.transformers.snowflake(payload.channel.parent_id)
|
||||
: undefined,
|
||||
memberCount: payload.channel.member_count,
|
||||
messageCount: payload.channel.message_count,
|
||||
archiveTimestamp: payload.channel.thread_metadata?.archive_timestamp
|
||||
? Date.parse(payload.channel.thread_metadata.archive_timestamp)
|
||||
: undefined,
|
||||
autoArchiveDuration: payload.channel.thread_metadata?.auto_archive_duration,
|
||||
botIsMember: Boolean(payload.channel.member),
|
||||
archived: payload.channel.thread_metadata?.archived,
|
||||
locked: payload.channel.thread_metadata?.locked,
|
||||
invitable: payload.channel.thread_metadata?.invitable,
|
||||
createTimestamp: payload.channel.thread_metadata?.create_timestamp
|
||||
? Date.parse(payload.channel.thread_metadata.create_timestamp)
|
||||
: undefined,
|
||||
newlyCreated: payload.channel.newly_created,
|
||||
flags: payload.channel.flags
|
||||
}
|
||||
|
||||
return channel as Optionalize<typeof channel>
|
||||
}
|
||||
|
||||
export interface Channel extends ReturnType<typeof transformChannel> {}
|
||||
@@ -1,99 +0,0 @@
|
||||
import type {
|
||||
ButtonStyles,
|
||||
DiscordComponent,
|
||||
MessageComponentTypes,
|
||||
SelectOption,
|
||||
TextStyles
|
||||
} from '@discordeno/types'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
|
||||
export function transformComponent (
|
||||
rest: RestManager,
|
||||
payload: DiscordComponent
|
||||
): Component {
|
||||
return {
|
||||
type: payload.type,
|
||||
customId: payload.custom_id,
|
||||
disabled: payload.disabled,
|
||||
style: payload.style,
|
||||
label: payload.label,
|
||||
emoji: payload.emoji
|
||||
? {
|
||||
id: payload.emoji.id
|
||||
? rest.transformers.snowflake(payload.emoji.id)
|
||||
: undefined,
|
||||
name: payload.emoji.name,
|
||||
animated: payload.emoji.animated
|
||||
}
|
||||
: undefined,
|
||||
url: payload.url,
|
||||
options: payload.options?.map((option) => ({
|
||||
label: option.label,
|
||||
value: option.value,
|
||||
description: option.description,
|
||||
emoji: option.emoji
|
||||
? {
|
||||
id: option.emoji.id
|
||||
? rest.transformers.snowflake(option.emoji.id)
|
||||
: undefined,
|
||||
name: option.emoji.name,
|
||||
animated: option.emoji.animated
|
||||
}
|
||||
: undefined,
|
||||
default: option.default
|
||||
})),
|
||||
placeholder: payload.placeholder,
|
||||
minValues: payload.min_values,
|
||||
maxValues: payload.max_values,
|
||||
minLength: payload.min_length,
|
||||
maxLength: payload.max_length,
|
||||
value: payload.value,
|
||||
components: payload.components?.map((component) =>
|
||||
rest.transformers.component(rest, component)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// THIS TRANSFORMER HAS A CIRCULAR REFERENCE TO CALL ITSELF FOR COMPONENTS SO AN AUTOMATED TYPE CAN NOT BE CREATED!
|
||||
|
||||
export interface Component {
|
||||
/** component type */
|
||||
type: MessageComponentTypes
|
||||
/** a developer-defined identifier for the component, max 100 characters */
|
||||
customId?: string
|
||||
/** whether this component is required to be filled, default true */
|
||||
required?: boolean
|
||||
/** whether the component is disabled, default false */
|
||||
disabled?: boolean
|
||||
/** For different styles/colors of the buttons */
|
||||
style?: ButtonStyles | TextStyles
|
||||
/** text that appears on the button (max 80 characters) */
|
||||
label?: string
|
||||
/** the dev-define value of the option, max 100 characters for select or 4000 for input. */
|
||||
value?: string
|
||||
/** Emoji object that includes fields of name, id, and animated supporting unicode and custom emojis. */
|
||||
emoji?: {
|
||||
/** Emoji id */
|
||||
id?: bigint
|
||||
/** Emoji name */
|
||||
name?: string
|
||||
/** Whether this emoji is animated */
|
||||
animated?: boolean
|
||||
}
|
||||
/** optional url for link-style buttons that can navigate a user to the web. Only type 5 Link buttons can have a url */
|
||||
url?: string
|
||||
/** The choices! Maximum of 25 items. */
|
||||
options?: SelectOption[]
|
||||
/** A custom placeholder text if nothing is selected. Maximum 150 characters. */
|
||||
placeholder?: string
|
||||
/** The minimum number of items that must be selected. Default 1. Between 1-25. */
|
||||
minValues?: number
|
||||
/** The maximum number of items that can be selected. Default 1. Between 1-25. */
|
||||
maxValues?: number
|
||||
/** The minimum input length for a text input. Between 0-4000. */
|
||||
minLength?: number
|
||||
/** The maximum input length for a text input. Between 1-4000. */
|
||||
maxLength?: number
|
||||
/** a list of child components */
|
||||
components?: Component[]
|
||||
}
|
||||
@@ -1,59 +0,0 @@
|
||||
import type { DiscordEmbed, Optionalize } from '@discordeno/types'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformEmbed (rest: RestManager, payload: DiscordEmbed) {
|
||||
const embed = {
|
||||
title: payload.title,
|
||||
type: payload.type,
|
||||
description: payload.description,
|
||||
url: payload.url,
|
||||
timestamp: payload.timestamp ? Date.parse(payload.timestamp) : undefined,
|
||||
color: payload.color,
|
||||
footer: payload.footer
|
||||
? {
|
||||
text: payload.footer.text,
|
||||
iconUrl: payload.footer.icon_url,
|
||||
proxyIconUrl: payload.footer.proxy_icon_url
|
||||
}
|
||||
: undefined,
|
||||
image: payload.image
|
||||
? {
|
||||
url: payload.image.url,
|
||||
proxyUrl: payload.image.proxy_url,
|
||||
height: payload.image.height,
|
||||
width: payload.image.width
|
||||
}
|
||||
: undefined,
|
||||
thumbnail: payload.thumbnail
|
||||
? {
|
||||
url: payload.thumbnail.url,
|
||||
proxyUrl: payload.thumbnail.proxy_url,
|
||||
height: payload.thumbnail.height,
|
||||
width: payload.thumbnail.width
|
||||
}
|
||||
: undefined,
|
||||
video: payload.video
|
||||
? {
|
||||
url: payload.video.url,
|
||||
proxyUrl: payload.video.proxy_url,
|
||||
height: payload.video.height,
|
||||
width: payload.video.width
|
||||
}
|
||||
: undefined,
|
||||
provider: payload.provider,
|
||||
author: payload.author
|
||||
? {
|
||||
name: payload.author.name,
|
||||
url: payload.author.url,
|
||||
iconUrl: payload.author.icon_url,
|
||||
proxyIconUrl: payload.author.proxy_icon_url
|
||||
}
|
||||
: undefined,
|
||||
fields: payload.fields
|
||||
}
|
||||
|
||||
return embed as Optionalize<typeof embed>
|
||||
}
|
||||
|
||||
export interface Embed extends ReturnType<typeof transformEmbed> {}
|
||||
@@ -1,18 +0,0 @@
|
||||
import type { DiscordEmoji, Optionalize } from '@discordeno/types'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
import { EmojiToggles } from './toggles/emoji.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformEmoji (rest: RestManager, payload: DiscordEmoji) {
|
||||
const emoji = {
|
||||
id: payload.id ? rest.transformers.snowflake(payload.id) : undefined,
|
||||
name: payload.name,
|
||||
roles: payload.roles?.map((id) => rest.transformers.snowflake(id)),
|
||||
user: payload.user ? rest.transformers.user(rest, payload.user) : undefined,
|
||||
toggles: new EmojiToggles(payload)
|
||||
}
|
||||
|
||||
return emoji as Optionalize<typeof emoji>
|
||||
}
|
||||
|
||||
export interface Emoji extends ReturnType<typeof transformEmoji> {}
|
||||
@@ -1,22 +0,0 @@
|
||||
import type {
|
||||
DiscordGetGatewayBot,
|
||||
GetGatewayBot,
|
||||
Optionalize
|
||||
} from '@discordeno/types'
|
||||
|
||||
export function transformGatewayBot (
|
||||
payload: DiscordGetGatewayBot
|
||||
): GetGatewayBot {
|
||||
const gatewayBot = {
|
||||
url: payload.url,
|
||||
shards: payload.shards,
|
||||
sessionStartLimit: {
|
||||
total: payload.session_start_limit.total,
|
||||
remaining: payload.session_start_limit.remaining,
|
||||
resetAfter: payload.session_start_limit.reset_after,
|
||||
maxConcurrency: payload.session_start_limit.max_concurrency
|
||||
}
|
||||
}
|
||||
|
||||
return gatewayBot as Optionalize<typeof gatewayBot>
|
||||
}
|
||||
@@ -1,144 +0,0 @@
|
||||
import type { DiscordGuild, Optionalize } from '@discordeno/types'
|
||||
import { Collection, iconHashToBigInt } from '@discordeno/utils'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
import type { Emoji } from '../transformers/emoji.js'
|
||||
import { GuildToggles } from './toggles/guild.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformGuild (
|
||||
rest: RestManager,
|
||||
payload: { guild: DiscordGuild } & { shardId: number }
|
||||
) {
|
||||
const guildId = rest.transformers.snowflake(payload.guild.id)
|
||||
|
||||
const guild = {
|
||||
afkTimeout: payload.guild.afk_timeout,
|
||||
approximateMemberCount: payload.guild.approximate_member_count,
|
||||
approximatePresenceCount: payload.guild.approximate_presence_count,
|
||||
defaultMessageNotifications: payload.guild.default_message_notifications,
|
||||
description: payload.guild.description,
|
||||
explicitContentFilter: payload.guild.explicit_content_filter,
|
||||
toggles: new GuildToggles(payload.guild),
|
||||
maxMembers: payload.guild.max_members,
|
||||
maxPresences: payload.guild.max_presences ?? undefined,
|
||||
maxVideoChannelUsers: payload.guild.max_video_channel_users,
|
||||
mfaLevel: payload.guild.mfa_level,
|
||||
name: payload.guild.name,
|
||||
nsfwLevel: payload.guild.nsfw_level,
|
||||
preferredLocale: payload.guild.preferred_locale,
|
||||
premiumSubscriptionCount: payload.guild.premium_subscription_count,
|
||||
premiumTier: payload.guild.premium_tier,
|
||||
stageInstances: payload.guild.stage_instances?.map((si) => ({
|
||||
/** The id of this Stage instance */
|
||||
id: rest.transformers.snowflake(si.id),
|
||||
/** The guild id of the associated Stage channel */
|
||||
guildId,
|
||||
/** The id of the associated Stage channel */
|
||||
channelId: rest.transformers.snowflake(si.channel_id),
|
||||
/** The topic of the Stage instance (1-120 characters) */
|
||||
topic: si.topic
|
||||
})),
|
||||
systemChannelFlags: payload.guild.system_channel_flags,
|
||||
vanityUrlCode: payload.guild.vanity_url_code,
|
||||
verificationLevel: payload.guild.verification_level,
|
||||
welcomeScreen: payload.guild.welcome_screen
|
||||
? {
|
||||
description: payload.guild.welcome_screen.description ?? undefined,
|
||||
welcomeChannels: payload.guild.welcome_screen.welcome_channels.map(
|
||||
(wc) => ({
|
||||
channelId: rest.transformers.snowflake(wc.channel_id),
|
||||
description: wc.description,
|
||||
emojiId: wc.emoji_id
|
||||
? rest.transformers.snowflake(wc.emoji_id)
|
||||
: undefined,
|
||||
emojiName: wc.emoji_name ?? undefined
|
||||
})
|
||||
)
|
||||
}
|
||||
: undefined,
|
||||
discoverySplash: payload.guild.discovery_splash
|
||||
? iconHashToBigInt(payload.guild.discovery_splash)
|
||||
: undefined,
|
||||
|
||||
joinedAt: payload.guild.joined_at
|
||||
? Date.parse(payload.guild.joined_at)
|
||||
: undefined,
|
||||
memberCount: payload.guild.member_count ?? 0,
|
||||
shardId: payload.shardId,
|
||||
icon: payload.guild.icon ? iconHashToBigInt(payload.guild.icon) : undefined,
|
||||
banner: payload.guild.banner
|
||||
? iconHashToBigInt(payload.guild.banner)
|
||||
: undefined,
|
||||
splash: payload.guild.splash
|
||||
? iconHashToBigInt(payload.guild.splash)
|
||||
: undefined,
|
||||
channels: new Collection(
|
||||
payload.guild.channels?.map((channel) => {
|
||||
const result = rest.transformers.channel(rest, { channel, guildId })
|
||||
return [result.id, result]
|
||||
})
|
||||
),
|
||||
members: new Collection(
|
||||
payload.guild.members?.map((member) => {
|
||||
const result = rest.transformers.member(
|
||||
rest,
|
||||
member,
|
||||
guildId,
|
||||
rest.transformers.snowflake(member.user!.id)
|
||||
)
|
||||
return [result.id, result]
|
||||
})
|
||||
),
|
||||
roles: new Collection(
|
||||
payload.guild.roles?.map((role) => {
|
||||
const result = rest.transformers.role(rest, { role, guildId })
|
||||
return [result.id, result]
|
||||
})
|
||||
),
|
||||
emojis: new Collection(
|
||||
(payload.guild.emojis ?? []).map((emoji) => {
|
||||
const em: Emoji = rest.transformers.emoji(rest, emoji)
|
||||
return [em.id!, em]
|
||||
})
|
||||
),
|
||||
voiceStates: new Collection(
|
||||
(payload.guild.voice_states ?? [])
|
||||
.map((vs) =>
|
||||
rest.transformers.voiceState(rest, { voiceState: vs, guildId })
|
||||
)
|
||||
.map((vs) => [vs.userId, vs])
|
||||
),
|
||||
|
||||
id: guildId,
|
||||
// WEIRD EDGE CASE WITH BOT CREATED SERVERS
|
||||
ownerId: payload.guild.owner_id
|
||||
? rest.transformers.snowflake(payload.guild.owner_id)
|
||||
: 0n,
|
||||
permissions: payload.guild.permissions
|
||||
? rest.transformers.snowflake(payload.guild.permissions)
|
||||
: 0n,
|
||||
afkChannelId: payload.guild.afk_channel_id
|
||||
? rest.transformers.snowflake(payload.guild.afk_channel_id)
|
||||
: undefined,
|
||||
widgetChannelId: payload.guild.widget_channel_id
|
||||
? rest.transformers.snowflake(payload.guild.widget_channel_id)
|
||||
: undefined,
|
||||
applicationId: payload.guild.application_id
|
||||
? rest.transformers.snowflake(payload.guild.application_id)
|
||||
: undefined,
|
||||
systemChannelId: payload.guild.system_channel_id
|
||||
? rest.transformers.snowflake(payload.guild.system_channel_id)
|
||||
: undefined,
|
||||
rulesChannelId: payload.guild.rules_channel_id
|
||||
? rest.transformers.snowflake(payload.guild.rules_channel_id)
|
||||
: undefined,
|
||||
publicUpdatesChannelId: payload.guild.public_updates_channel_id
|
||||
? rest.transformers.snowflake(payload.guild.public_updates_channel_id)
|
||||
: undefined,
|
||||
premiumProgressBarEnabled: payload.guild.premium_progress_bar_enabled
|
||||
}
|
||||
|
||||
return guild as Optionalize<typeof guild>
|
||||
}
|
||||
|
||||
export interface Guild extends ReturnType<typeof transformGuild> {}
|
||||
@@ -1,37 +0,0 @@
|
||||
export * from './activity.js'
|
||||
export * from './application.js'
|
||||
export * from './applicationCommand.js'
|
||||
export * from './applicationCommandOption.js'
|
||||
export * from './applicationCommandOptionChoice.js'
|
||||
export * from './applicationCommandPermission.js'
|
||||
export * from './attachment.js'
|
||||
export * from './auditLogEntry.js'
|
||||
export * from './automodActionExecution.js'
|
||||
export * from './automodRule.js'
|
||||
export * from './channel.js'
|
||||
export * from './component.js'
|
||||
export * from './embed.js'
|
||||
export * from './emoji.js'
|
||||
export * from './gatewayBot.js'
|
||||
export * from './guild.js'
|
||||
export * from './integration.js'
|
||||
export * from './interaction.js'
|
||||
export * from './invite.js'
|
||||
export * from './member.js'
|
||||
export * from './message.js'
|
||||
export * from './presence.js'
|
||||
export * from './reverse/index.js'
|
||||
export * from './role.js'
|
||||
export * from './scheduledEvent.js'
|
||||
export * from './stageInstance.js'
|
||||
export * from './sticker.js'
|
||||
export * from './team.js'
|
||||
export * from './template.js'
|
||||
export * from './threadMember.js'
|
||||
export * from './toggles/index.js'
|
||||
export * from './voiceRegion.js'
|
||||
export * from './voiceState.js'
|
||||
export * from './webhook.js'
|
||||
export * from './welcomeScreen.js'
|
||||
export * from './widget.js'
|
||||
export * from './widgetSettings.js'
|
||||
@@ -1,53 +0,0 @@
|
||||
import type {
|
||||
DiscordIntegrationCreateUpdate,
|
||||
Optionalize
|
||||
} from '@discordeno/types'
|
||||
import { iconHashToBigInt } from '@discordeno/utils'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformIntegration (
|
||||
rest: RestManager,
|
||||
payload: DiscordIntegrationCreateUpdate
|
||||
) {
|
||||
const integration = {
|
||||
guildId: rest.transformers.snowflake(payload.guild_id),
|
||||
id: rest.transformers.snowflake(payload.id),
|
||||
name: payload.name,
|
||||
type: payload.type,
|
||||
enabled: payload.enabled,
|
||||
syncing: payload.syncing,
|
||||
roleId: payload.role_id
|
||||
? rest.transformers.snowflake(payload.role_id)
|
||||
: undefined,
|
||||
enableEmoticons: payload.enable_emoticons,
|
||||
expireBehavior: payload.expire_behavior,
|
||||
expireGracePeriod: payload.expire_grace_period,
|
||||
user: payload.user ? rest.transformers.user(rest, payload.user) : undefined,
|
||||
account: {
|
||||
id: rest.transformers.snowflake(payload.account.id),
|
||||
name: payload.account.name
|
||||
},
|
||||
syncedAt: payload.synced_at ? Date.parse(payload.synced_at) : undefined,
|
||||
subscriberCount: payload.subscriber_count,
|
||||
revoked: payload.revoked,
|
||||
application: payload.application
|
||||
? {
|
||||
id: rest.transformers.snowflake(payload.application.id),
|
||||
name: payload.application.name,
|
||||
icon: payload.application.icon
|
||||
? iconHashToBigInt(payload.application.icon)
|
||||
: undefined,
|
||||
description: payload.application.description,
|
||||
bot: payload.application.bot
|
||||
? rest.transformers.user(rest, payload.application.bot)
|
||||
: undefined
|
||||
}
|
||||
: undefined,
|
||||
scopes: payload.scopes
|
||||
}
|
||||
|
||||
return integration as Optionalize<typeof integration>
|
||||
}
|
||||
|
||||
export interface Integration extends ReturnType<typeof transformIntegration> {}
|
||||
@@ -1,204 +0,0 @@
|
||||
import type {
|
||||
ChannelTypes,
|
||||
DiscordInteraction,
|
||||
DiscordInteractionDataOption,
|
||||
DiscordInteractionDataResolved,
|
||||
Optionalize
|
||||
} from '@discordeno/types'
|
||||
import { Collection } from '@discordeno/utils'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
import type { Attachment } from './attachment.js'
|
||||
import type { Member, User } from './member.js'
|
||||
import type { Message } from './message.js'
|
||||
import type { Role } from './role.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformInteraction (
|
||||
rest: RestManager,
|
||||
payload: DiscordInteraction
|
||||
) {
|
||||
const guildId = payload.guild_id
|
||||
? rest.transformers.snowflake(payload.guild_id)
|
||||
: undefined
|
||||
const user = rest.transformers.user(
|
||||
rest,
|
||||
payload.member?.user ?? payload.user!
|
||||
)
|
||||
|
||||
const interaction = {
|
||||
// UNTRANSFORMED STUFF HERE
|
||||
type: payload.type,
|
||||
token: payload.token,
|
||||
version: payload.version,
|
||||
locale: payload.locale,
|
||||
guildLocale: payload.guild_locale,
|
||||
|
||||
// TRANSFORMED STUFF BELOW
|
||||
guildId,
|
||||
user,
|
||||
id: rest.transformers.snowflake(payload.id),
|
||||
applicationId: rest.transformers.snowflake(payload.application_id),
|
||||
appPermissions: payload.app_permissions
|
||||
? rest.transformers.snowflake(payload.app_permissions)
|
||||
: undefined,
|
||||
message: payload.message
|
||||
? rest.transformers.message(rest, payload.message)
|
||||
: undefined,
|
||||
channelId: payload.channel_id
|
||||
? rest.transformers.snowflake(payload.channel_id)
|
||||
: undefined,
|
||||
member:
|
||||
payload.member && guildId
|
||||
? rest.transformers.member(rest, payload.member, guildId, user.id)
|
||||
: undefined,
|
||||
|
||||
data: payload.data
|
||||
? {
|
||||
componentType: payload.data.component_type,
|
||||
customId: payload.data.custom_id,
|
||||
components: payload.data.components?.map((component) =>
|
||||
rest.transformers.component(rest, component)
|
||||
),
|
||||
values: payload.data.values,
|
||||
id: payload.data.id
|
||||
? rest.transformers.snowflake(payload.data.id)
|
||||
: undefined,
|
||||
name: payload.data.name,
|
||||
resolved: payload.data.resolved
|
||||
? transformInteractionDataResolved(
|
||||
rest,
|
||||
payload.data.resolved,
|
||||
guildId
|
||||
)
|
||||
: undefined,
|
||||
options: payload.data.options?.map((opt) =>
|
||||
rest.transformers.interactionDataOptions(rest, opt)
|
||||
),
|
||||
targetId: payload.data.target_id
|
||||
? rest.transformers.snowflake(payload.data.target_id)
|
||||
: undefined,
|
||||
guildId: payload.data.guild_id
|
||||
? rest.transformers.snowflake(payload.data.guild_id)
|
||||
: undefined
|
||||
}
|
||||
: undefined
|
||||
}
|
||||
|
||||
return interaction
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformInteractionDataOption (
|
||||
rest: RestManager,
|
||||
option: DiscordInteractionDataOption
|
||||
) {
|
||||
const opt = {
|
||||
name: option.name,
|
||||
type: option.type,
|
||||
value: option.value,
|
||||
options: option.options,
|
||||
focused: option.focused
|
||||
}
|
||||
|
||||
return opt as Optionalize<typeof opt>
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformInteractionDataResolved (
|
||||
rest: RestManager,
|
||||
resolved: DiscordInteractionDataResolved,
|
||||
guildId?: bigint
|
||||
) {
|
||||
const transformed: {
|
||||
messages?: Collection<bigint, Message>
|
||||
users?: Collection<bigint, User>
|
||||
members?: Collection<bigint, Member>
|
||||
roles?: Collection<bigint, Role>
|
||||
channels?: Collection<
|
||||
bigint,
|
||||
{ id: bigint, name: string, type: ChannelTypes, permissions: bigint }
|
||||
>
|
||||
attachments?: Collection<bigint, Attachment>
|
||||
} = {}
|
||||
|
||||
if (resolved.messages) {
|
||||
transformed.messages = new Collection(
|
||||
Object.entries(resolved.messages).map(([id, value]) => {
|
||||
const message: Message = rest.transformers.message(rest, value)
|
||||
return [message.id, message]
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
if (resolved.users) {
|
||||
transformed.users = new Collection(
|
||||
Object.entries(resolved.users).map(([id, value]) => {
|
||||
const user = rest.transformers.user(rest, value)
|
||||
return [user.id, user]
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
if (guildId && resolved.members) {
|
||||
transformed.members = new Collection(
|
||||
Object.entries(resolved.members).map(([id, value]) => {
|
||||
const member: Member = rest.transformers.member(
|
||||
rest,
|
||||
value,
|
||||
guildId,
|
||||
rest.transformers.snowflake(id)
|
||||
)
|
||||
return [member.id, member]
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
if (guildId && resolved.roles) {
|
||||
transformed.roles = new Collection(
|
||||
Object.entries(resolved.roles).map(([id, value]) => {
|
||||
const role = rest.transformers.role(rest, { role: value, guildId })
|
||||
return [role.id, role]
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
if (resolved.channels) {
|
||||
transformed.channels = new Collection(
|
||||
Object.entries(resolved.channels).map(([key, value]) => {
|
||||
const id = rest.transformers.snowflake(key)
|
||||
const channel = value as {
|
||||
id: string
|
||||
name: string
|
||||
type: ChannelTypes
|
||||
permissions: string
|
||||
}
|
||||
return [
|
||||
id,
|
||||
{
|
||||
id,
|
||||
name: channel.name,
|
||||
type: channel.type,
|
||||
permissions: rest.transformers.snowflake(channel.permissions)
|
||||
}
|
||||
]
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
if (resolved.attachments) {
|
||||
transformed.attachments = new Collection(
|
||||
Object.entries(resolved.attachments).map(([key, value]) => {
|
||||
const id = rest.transformers.snowflake(key)
|
||||
return [id, rest.transformers.attachment(rest, value)]
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
return transformed
|
||||
}
|
||||
|
||||
export interface Interaction extends ReturnType<typeof transformInteraction> {}
|
||||
export interface InteractionDataResolved
|
||||
extends ReturnType<typeof transformInteractionDataResolved> {}
|
||||
export interface InteractionDataOption
|
||||
extends ReturnType<typeof transformInteractionDataOption> {}
|
||||
@@ -1,51 +0,0 @@
|
||||
import type { DiscordInviteCreate, Optionalize } from '@discordeno/types'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformInvite (
|
||||
rest: RestManager,
|
||||
invite: DiscordInviteCreate
|
||||
) {
|
||||
const transformedInvite = {
|
||||
/** The channel the invite is for */
|
||||
channelId: rest.transformers.snowflake(invite.channel_id),
|
||||
/** The unique invite code */
|
||||
code: invite.code,
|
||||
/** The time at which the invite was created */
|
||||
createdAt: Date.parse(invite.created_at),
|
||||
/** The guild of the invite */
|
||||
guildId: invite.guild_id
|
||||
? rest.transformers.snowflake(invite.guild_id)
|
||||
: undefined,
|
||||
/** The user that created the invite */
|
||||
inviter: invite.inviter
|
||||
? rest.transformers.user(rest, invite.inviter)
|
||||
: undefined,
|
||||
/** How long the invite is valid for (in seconds) */
|
||||
maxAge: invite.max_age,
|
||||
/** The maximum number of times the invite can be used */
|
||||
maxUses: invite.max_uses,
|
||||
/** The type of target for this voice channel invite */
|
||||
targetType: invite.target_type,
|
||||
/** The target user for this invite */
|
||||
targetUser: invite.target_user
|
||||
? rest.transformers.user(rest, invite.target_user)
|
||||
: undefined,
|
||||
/** The embedded application to open for this voice channel embedded application invite */
|
||||
targetApplication: invite.target_application
|
||||
? rest.transformers.application(
|
||||
rest,
|
||||
// @ts-expect-error should not break anything even though its partial. if it does blame wolf :)
|
||||
invite.target_application
|
||||
)
|
||||
: undefined,
|
||||
/** Whether or not the invite is temporary (invited users will be kicked on disconnect unless they're assigned a role) */
|
||||
temporary: invite.temporary,
|
||||
/** How many times the invite has been used (always will be 0) */
|
||||
uses: invite.uses
|
||||
}
|
||||
|
||||
return transformedInvite as Optionalize<typeof transformedInvite>
|
||||
}
|
||||
|
||||
export interface Invite extends ReturnType<typeof transformInvite> {}
|
||||
@@ -1,60 +0,0 @@
|
||||
import type {
|
||||
DiscordMember,
|
||||
DiscordUser,
|
||||
Optionalize
|
||||
} from '@discordeno/types'
|
||||
import { iconHashToBigInt } from '@discordeno/utils'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
import { MemberToggles } from './toggles/member.js'
|
||||
import { UserToggles } from './toggles/user.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformUser (rest: RestManager, payload: DiscordUser) {
|
||||
const user = {
|
||||
id: rest.transformers.snowflake(payload.id || ''),
|
||||
username: payload.username,
|
||||
discriminator: payload.discriminator,
|
||||
avatar: payload.avatar ? iconHashToBigInt(payload.avatar) : undefined,
|
||||
locale: payload.locale,
|
||||
email: payload.email ?? undefined,
|
||||
flags: payload.flags,
|
||||
premiumType: payload.premium_type,
|
||||
publicFlags: payload.public_flags,
|
||||
toggles: new UserToggles(payload)
|
||||
}
|
||||
|
||||
return user as Optionalize<typeof user>
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformMember (
|
||||
rest: RestManager,
|
||||
payload: DiscordMember,
|
||||
guildId: bigint,
|
||||
userId: bigint
|
||||
) {
|
||||
const member = {
|
||||
id: userId,
|
||||
guildId,
|
||||
user: payload.user ? rest.transformers.user(rest, payload.user) : undefined,
|
||||
nick: payload.nick ?? undefined,
|
||||
roles: payload.roles.map((id) => rest.transformers.snowflake(id)),
|
||||
joinedAt: Date.parse(payload.joined_at),
|
||||
premiumSince: payload.premium_since
|
||||
? Date.parse(payload.premium_since)
|
||||
: undefined,
|
||||
avatar: payload.avatar ? iconHashToBigInt(payload.avatar) : undefined,
|
||||
permissions: payload.permissions
|
||||
? rest.transformers.snowflake(payload.permissions)
|
||||
: undefined,
|
||||
communicationDisabledUntil: payload.communication_disabled_until
|
||||
? Date.parse(payload.communication_disabled_until)
|
||||
: undefined,
|
||||
toggles: new MemberToggles(payload)
|
||||
}
|
||||
|
||||
return member as Optionalize<typeof member>
|
||||
}
|
||||
|
||||
export interface Member extends ReturnType<typeof transformMember> {}
|
||||
export interface User extends ReturnType<typeof transformUser> {}
|
||||
@@ -1,148 +0,0 @@
|
||||
import type { DiscordMessage, Optionalize } from '@discordeno/types'
|
||||
import { CHANNEL_MENTION_REGEX, iconHashToBigInt } from '@discordeno/utils'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
import { MemberToggles } from './toggles/member.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformMessage (rest: RestManager, payload: DiscordMessage) {
|
||||
const guildId = payload.guild_id
|
||||
? rest.transformers.snowflake(payload.guild_id)
|
||||
: undefined
|
||||
const userId = rest.transformers.snowflake(payload.author.id)
|
||||
|
||||
const message = {
|
||||
// UNTRANSFORMED STUFF HERE
|
||||
content: payload.content ?? '',
|
||||
isFromBot: payload.author.bot ?? false,
|
||||
tag: `${payload.author.username}#${payload.author.discriminator}`,
|
||||
timestamp: Date.parse(payload.timestamp),
|
||||
editedTimestamp: payload.edited_timestamp
|
||||
? Date.parse(payload.edited_timestamp)
|
||||
: undefined,
|
||||
bitfield:
|
||||
(payload.tts ? 1n : 0n) |
|
||||
(payload.mention_everyone ? 2n : 0n) |
|
||||
(payload.pinned ? 4n : 0n),
|
||||
attachments: payload.attachments?.map((attachment) =>
|
||||
rest.transformers.attachment(rest, attachment)
|
||||
),
|
||||
embeds: payload.embeds?.map((embed) =>
|
||||
rest.transformers.embed(rest, embed)
|
||||
),
|
||||
reactions: payload.reactions?.map((reaction) => ({
|
||||
me: reaction.me,
|
||||
count: reaction.count,
|
||||
emoji: rest.transformers.emoji(rest, reaction.emoji)
|
||||
})),
|
||||
type: payload.type,
|
||||
activity: payload.activity
|
||||
? {
|
||||
type: payload.activity.type,
|
||||
partyId: payload.activity.party_id
|
||||
}
|
||||
: undefined,
|
||||
application: payload.application,
|
||||
flags: payload.flags,
|
||||
interaction: payload.interaction
|
||||
? {
|
||||
id: rest.transformers.snowflake(payload.interaction.id),
|
||||
type: payload.interaction.type,
|
||||
name: payload.interaction.name,
|
||||
user: rest.transformers.user(rest, payload.interaction.user),
|
||||
member: payload.interaction.member
|
||||
? {
|
||||
id: userId,
|
||||
guildId,
|
||||
nick: payload.interaction.member.nick ?? undefined,
|
||||
roles: payload.interaction.member.roles?.map((id) =>
|
||||
rest.transformers.snowflake(id)
|
||||
),
|
||||
joinedAt: payload.interaction.member.joined_at
|
||||
? Date.parse(payload.interaction.member.joined_at)
|
||||
: undefined,
|
||||
premiumSince: payload.interaction.member.premium_since
|
||||
? Date.parse(payload.interaction.member.premium_since)
|
||||
: undefined,
|
||||
toggles: new MemberToggles(payload.interaction.member),
|
||||
avatar: payload.interaction.member.avatar
|
||||
? iconHashToBigInt(payload.interaction.member.avatar)
|
||||
: undefined,
|
||||
permissions: payload.interaction.member.permissions
|
||||
? rest.transformers.snowflake(
|
||||
payload.interaction.member.permissions
|
||||
)
|
||||
: undefined,
|
||||
communicationDisabledUntil: payload.interaction.member
|
||||
.communication_disabled_until
|
||||
? Date.parse(
|
||||
payload.interaction.member.communication_disabled_until
|
||||
)
|
||||
: undefined
|
||||
}
|
||||
: undefined
|
||||
}
|
||||
: undefined,
|
||||
thread: payload.thread
|
||||
? rest.transformers.channel(rest, { channel: payload.thread, guildId })
|
||||
: undefined,
|
||||
components: payload.components?.map((component) =>
|
||||
rest.transformers.component(rest, component)
|
||||
),
|
||||
stickerItems: payload.sticker_items?.map((sticker) => ({
|
||||
id: rest.transformers.snowflake(sticker.id),
|
||||
name: sticker.name,
|
||||
formatType: sticker.format_type
|
||||
})),
|
||||
|
||||
// TRANSFORMED STUFF BELOW
|
||||
id: rest.transformers.snowflake(payload.id),
|
||||
guildId,
|
||||
channelId: rest.transformers.snowflake(payload.channel_id),
|
||||
webhookId: payload.webhook_id
|
||||
? rest.transformers.snowflake(payload.webhook_id)
|
||||
: undefined,
|
||||
authorId: userId,
|
||||
applicationId: payload.application_id
|
||||
? rest.transformers.snowflake(payload.application_id)
|
||||
: undefined,
|
||||
messageReference: payload.message_reference
|
||||
? {
|
||||
messageId: payload.message_reference.message_id
|
||||
? rest.transformers.snowflake(payload.message_reference.message_id)
|
||||
: undefined,
|
||||
channelId: payload.message_reference.channel_id
|
||||
? rest.transformers.snowflake(payload.message_reference.channel_id)
|
||||
: undefined,
|
||||
guildId: payload.message_reference.guild_id
|
||||
? rest.transformers.snowflake(payload.message_reference.guild_id)
|
||||
: undefined
|
||||
}
|
||||
: undefined,
|
||||
mentionedUserIds: payload.mentions
|
||||
? payload.mentions.map((m) => rest.transformers.snowflake(m.id))
|
||||
: [],
|
||||
mentionedRoleIds: payload.mention_roles
|
||||
? payload.mention_roles.map((id) => rest.transformers.snowflake(id))
|
||||
: [],
|
||||
mentionedChannelIds: [
|
||||
// Keep any ids tht discord sends
|
||||
...(payload.mention_channels ?? []).map((m) =>
|
||||
rest.transformers.snowflake(m.id)
|
||||
),
|
||||
// Add any other ids that can be validated in a channel mention format
|
||||
...(payload.content?.match(CHANNEL_MENTION_REGEX) ?? []).map((text) =>
|
||||
// converts the <#123> into 123
|
||||
rest.transformers.snowflake(text.substring(2, text.length - 1))
|
||||
)
|
||||
],
|
||||
member:
|
||||
payload.member && guildId
|
||||
? rest.transformers.member(rest, payload.member, guildId, userId)
|
||||
: undefined,
|
||||
nonce: payload.nonce
|
||||
}
|
||||
|
||||
return message as Optionalize<typeof message>
|
||||
}
|
||||
|
||||
export interface Message extends ReturnType<typeof transformMessage> {}
|
||||
@@ -1,40 +0,0 @@
|
||||
import type { DiscordPresenceUpdate, Optionalize } from '@discordeno/types'
|
||||
import { PresenceStatus } from '@discordeno/types'
|
||||
import { iconHashToBigInt } from '@discordeno/utils'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
import { UserToggles } from './toggles/user.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformPresence (
|
||||
rest: RestManager,
|
||||
payload: DiscordPresenceUpdate
|
||||
) {
|
||||
const presence = {
|
||||
user: {
|
||||
id: rest.transformers.snowflake(payload.user.id || ''),
|
||||
username: payload.user.username ?? undefined,
|
||||
discriminator: payload.user.discriminator ?? undefined,
|
||||
avatar: payload.user.avatar
|
||||
? iconHashToBigInt(payload.user.avatar)
|
||||
: undefined,
|
||||
locale: payload.user.locale ?? undefined,
|
||||
email: payload.user.email ?? undefined,
|
||||
flags: payload.user.flags ?? undefined,
|
||||
premiumType: payload.user.premium_type ?? undefined,
|
||||
publicFlags: payload.user.public_flags ?? undefined,
|
||||
toggles: new UserToggles(payload.user)
|
||||
},
|
||||
guildId: rest.transformers.snowflake(payload.guild_id),
|
||||
status: PresenceStatus[payload.status],
|
||||
activities: payload.activities.map((activity) =>
|
||||
rest.transformers.activity(rest, activity)
|
||||
),
|
||||
desktop: payload.client_status.desktop,
|
||||
mobile: payload.client_status.mobile,
|
||||
web: payload.client_status.web
|
||||
}
|
||||
|
||||
return presence as Optionalize<typeof presence>
|
||||
}
|
||||
|
||||
export interface PresenceUpdate extends ReturnType<typeof transformPresence> {}
|
||||
@@ -1,55 +0,0 @@
|
||||
import type { DiscordActivity } from '@discordeno/types'
|
||||
import { bigintToSnowflake } from '@discordeno/utils'
|
||||
import type { RestManager } from '../../restManager.js'
|
||||
import type { Activity } from '../activity.js'
|
||||
|
||||
export function transformActivityToDiscordActivity (
|
||||
rest: RestManager,
|
||||
payload: Activity
|
||||
): DiscordActivity {
|
||||
return {
|
||||
name: payload.name,
|
||||
type: payload.type,
|
||||
url: payload.url ?? undefined,
|
||||
created_at: payload.createdAt,
|
||||
timestamps: {
|
||||
start: payload.startedAt,
|
||||
end: payload.endedAt
|
||||
},
|
||||
application_id: payload.applicationId
|
||||
? bigintToSnowflake(payload.applicationId)
|
||||
: undefined,
|
||||
details: payload.details ?? undefined,
|
||||
state: payload.state ?? undefined,
|
||||
emoji: payload.emoji
|
||||
? {
|
||||
name: payload.emoji.name,
|
||||
animated: payload.emoji.animated,
|
||||
id: payload.emoji.id
|
||||
? bigintToSnowflake(payload.emoji.id)
|
||||
: undefined
|
||||
}
|
||||
: undefined,
|
||||
party: {
|
||||
id: payload.partyId,
|
||||
size:
|
||||
payload.partyCurrentSize && payload.partyMaxSize
|
||||
? [payload.partyCurrentSize, payload.partyMaxSize]
|
||||
: undefined
|
||||
},
|
||||
assets: {
|
||||
large_image: payload.largeImage,
|
||||
large_text: payload.largeText,
|
||||
small_image: payload.largeImage,
|
||||
small_text: payload.largeText
|
||||
},
|
||||
secrets: {
|
||||
join: payload.join,
|
||||
spectate: payload.spectate,
|
||||
match: payload.match
|
||||
},
|
||||
instance: payload.instance,
|
||||
flags: payload.flags,
|
||||
buttons: payload.buttons
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
import type {
|
||||
AllowedMentions,
|
||||
DiscordAllowedMentions
|
||||
} from '@discordeno/types'
|
||||
import type { RestManager } from '../../restManager'
|
||||
|
||||
export function transformAllowedMentionsToDiscordAllowedMentions (
|
||||
rest: RestManager,
|
||||
mentions: AllowedMentions
|
||||
): DiscordAllowedMentions {
|
||||
return {
|
||||
parse: mentions.parse,
|
||||
replied_user: mentions.repliedUser,
|
||||
users: mentions.users?.map((id) => id.toString()),
|
||||
roles: mentions.roles?.map((id) => id.toString())
|
||||
}
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
import type { DiscordApplication } from '@discordeno/types'
|
||||
import { bigintToSnowflake, iconBigintToHash } from '@discordeno/utils'
|
||||
import type { RestManager } from '../../restManager.js'
|
||||
import type { Application } from '../application.js'
|
||||
|
||||
export function transformApplicationToDiscordApplication (
|
||||
rest: RestManager,
|
||||
payload: Application
|
||||
): DiscordApplication {
|
||||
return {
|
||||
name: payload.name,
|
||||
description: payload.description,
|
||||
rpc_origins: payload.rpcOrigins,
|
||||
bot_public: payload.botPublic,
|
||||
bot_require_code_grant: payload.botRequireCodeGrant,
|
||||
terms_of_service_url: payload.termsOfServiceUrl,
|
||||
privacy_policy_url: payload.privacyPolicyUrl,
|
||||
verify_key: payload.verifyKey,
|
||||
primary_sku_id: payload.primarySkuId,
|
||||
slug: payload.slug,
|
||||
cover_image: payload.coverImage
|
||||
? iconBigintToHash(payload.coverImage)
|
||||
: undefined,
|
||||
flags: payload.flags,
|
||||
|
||||
id: bigintToSnowflake(payload.id),
|
||||
icon: payload.icon ? iconBigintToHash(payload.icon) : null,
|
||||
owner: payload.owner
|
||||
? rest.transformers.reverse.user(rest, payload.owner)
|
||||
: undefined,
|
||||
team: payload.team
|
||||
? rest.transformers.reverse.team(rest, payload.team)
|
||||
: null,
|
||||
guild_id: payload.guildId ? bigintToSnowflake(payload.guildId) : undefined
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
import type { DiscordApplicationCommand } from '@discordeno/types'
|
||||
import type { RestManager } from '../../restManager.js'
|
||||
import type { ApplicationCommand } from '../applicationCommand.js'
|
||||
|
||||
export function transformApplicationCommandToDiscordApplicationCommand (
|
||||
rest: RestManager,
|
||||
payload: ApplicationCommand
|
||||
): DiscordApplicationCommand {
|
||||
return {
|
||||
id: rest.transformers.reverse.snowflake(payload.id),
|
||||
type: payload.type,
|
||||
application_id: rest.transformers.reverse.snowflake(payload.applicationId),
|
||||
guild_id: payload.guildId
|
||||
? rest.transformers.reverse.snowflake(payload.guildId)
|
||||
: undefined,
|
||||
name: payload.name,
|
||||
name_localizations: payload.nameLocalizations,
|
||||
description: payload.description,
|
||||
description_localizations: payload.descriptionLocalizations,
|
||||
options: payload.options?.map((option) =>
|
||||
rest.transformers.applicationCommandOption(rest, option)
|
||||
),
|
||||
default_member_permissions: payload.defaultMemberPermissions
|
||||
? rest.transformers.reverse.snowflake(payload.defaultMemberPermissions)
|
||||
: null,
|
||||
dm_permission: payload.dmPermission,
|
||||
version: payload.version
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
import type { DiscordApplicationCommandOption } from '@discordeno/types'
|
||||
import type { RestManager } from '../../restManager.js'
|
||||
import type { ApplicationCommandOption } from '../applicationCommandOption.js'
|
||||
|
||||
export function transformApplicationCommandOptionToDiscordApplicationCommandOption (
|
||||
rest: RestManager,
|
||||
payload: ApplicationCommandOption
|
||||
): DiscordApplicationCommandOption {
|
||||
return {
|
||||
type: payload.type,
|
||||
name: payload.name,
|
||||
name_localizations: payload.nameLocalizations,
|
||||
description: payload.description,
|
||||
description_localizations: payload.descriptionLocalizations,
|
||||
required: payload.required,
|
||||
choices: payload.choices?.map((choice) =>
|
||||
rest.transformers.reverse.applicationCommandOptionChoice(rest, choice)
|
||||
),
|
||||
options: payload.options?.map((option) =>
|
||||
rest.transformers.reverse.applicationCommandOption(rest, option)
|
||||
),
|
||||
channel_types: payload.channelTypes,
|
||||
min_value: payload.minValue,
|
||||
max_value: payload.maxValue,
|
||||
min_length: payload.minLength,
|
||||
max_length: payload.maxLength,
|
||||
autocomplete: payload.autocomplete
|
||||
}
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
import type { DiscordApplicationCommandOptionChoice } from '@discordeno/types'
|
||||
import type { RestManager } from '../../restManager.js'
|
||||
import type { ApplicationCommandOptionChoice } from '../applicationCommandOptionChoice.js'
|
||||
|
||||
export function transformApplicationCommandOptionChoiceToDiscordApplicationCommandOptionChoice (
|
||||
rest: RestManager,
|
||||
payload: ApplicationCommandOptionChoice
|
||||
): DiscordApplicationCommandOptionChoice {
|
||||
return {
|
||||
name: payload.name,
|
||||
name_localizations: payload.nameLocalizations,
|
||||
value: payload.value
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
import type { DiscordGuildApplicationCommandPermissions } from '@discordeno/types'
|
||||
import type { RestManager } from '../../restManager.js'
|
||||
import type { ApplicationCommandPermission } from '../applicationCommandPermission.js'
|
||||
|
||||
export function transformApplicationCommandPermissionToDiscordApplicationCommandPermission (
|
||||
rest: RestManager,
|
||||
payload: ApplicationCommandPermission
|
||||
): DiscordGuildApplicationCommandPermissions {
|
||||
return {
|
||||
id: rest.transformers.reverse.snowflake(payload.id),
|
||||
application_id: rest.transformers.reverse.snowflake(payload.applicationId),
|
||||
guild_id: rest.transformers.reverse.snowflake(payload.guildId),
|
||||
permissions: payload.permissions.map((perm) => ({
|
||||
id: rest.transformers.reverse.snowflake(perm.id),
|
||||
type: perm.type,
|
||||
permission: perm.permission
|
||||
}))
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
import type { DiscordAttachment } from '@discordeno/types'
|
||||
import type { RestManager } from '../../restManager.js'
|
||||
import type { Attachment } from '../attachment.js'
|
||||
|
||||
export function transformAttachmentToDiscordAttachment (
|
||||
rest: RestManager,
|
||||
payload: Attachment
|
||||
): DiscordAttachment {
|
||||
return {
|
||||
id: rest.transformers.reverse.snowflake(payload.id),
|
||||
filename: payload.filename,
|
||||
content_type: payload.contentType,
|
||||
size: payload.size,
|
||||
url: payload.url,
|
||||
proxy_url: payload.proxyUrl,
|
||||
height: payload.height,
|
||||
width: payload.width,
|
||||
ephemeral: payload.ephemeral,
|
||||
description: payload.description
|
||||
}
|
||||
}
|
||||
@@ -1,176 +0,0 @@
|
||||
import type { DiscordAuditLogEntry } from '@discordeno/types'
|
||||
import type { RestManager } from '../../restManager.js'
|
||||
import type { AuditLogEntry } from '../auditLogEntry.js'
|
||||
|
||||
export function transformAuditLogEntryToDiscordAuditLogEntry (
|
||||
rest: RestManager,
|
||||
payload: AuditLogEntry
|
||||
): DiscordAuditLogEntry {
|
||||
return {
|
||||
id: rest.transformers.reverse.snowflake(payload.id),
|
||||
// @ts-expect-error: ts can't identify return type of switch case
|
||||
changes: payload.changes?.map((change) => {
|
||||
switch (change.key) {
|
||||
case '$add':
|
||||
case '$remove':
|
||||
return {
|
||||
key: change.key,
|
||||
new_value: (
|
||||
change.new as Array<{
|
||||
id: bigint | undefined
|
||||
name: string | undefined
|
||||
}>
|
||||
)?.map((val) => ({
|
||||
id: val.id
|
||||
? rest.transformers.reverse.snowflake(val.id)
|
||||
: undefined,
|
||||
name: val.name
|
||||
})),
|
||||
old_value: (
|
||||
change.old as
|
||||
| Array<{
|
||||
id: bigint | undefined
|
||||
name: string | undefined
|
||||
}>
|
||||
| undefined
|
||||
)?.map((val) => ({
|
||||
id: val?.id
|
||||
? rest.transformers.reverse.snowflake(val.id)
|
||||
: undefined,
|
||||
name: val?.name
|
||||
}))
|
||||
}
|
||||
case 'discovery_splash_hash':
|
||||
case 'banner_hash':
|
||||
case 'rules_channel_id':
|
||||
case 'public_updates_channel_id':
|
||||
case 'icon_hash':
|
||||
case 'image_hash':
|
||||
case 'splash_hash':
|
||||
case 'owner_id':
|
||||
case 'widget_channel_id':
|
||||
case 'system_channel_id':
|
||||
case 'application_id':
|
||||
case 'permissions':
|
||||
case 'allow':
|
||||
case 'deny':
|
||||
case 'channel_id':
|
||||
case 'inviter_id':
|
||||
case 'avatar_hash':
|
||||
case 'id':
|
||||
return {
|
||||
key: change.key,
|
||||
old_value: change.old
|
||||
? rest.transformers.reverse.snowflake(change.old as bigint)
|
||||
: '',
|
||||
new_value: change.new
|
||||
? rest.transformers.reverse.snowflake(change.new as bigint)
|
||||
: ''
|
||||
}
|
||||
case 'name':
|
||||
case 'description':
|
||||
case 'preferred_locale':
|
||||
case 'region':
|
||||
case 'afk_channel_id':
|
||||
case 'vanity_url_code':
|
||||
case 'topic':
|
||||
case 'code':
|
||||
case 'nick':
|
||||
case 'location':
|
||||
return {
|
||||
key: change.key,
|
||||
old_value: change.old,
|
||||
new_value: change.new
|
||||
}
|
||||
case 'afk_timeout':
|
||||
case 'mfa_level':
|
||||
case 'verification_level':
|
||||
case 'explicit_content_filter':
|
||||
case 'default_message_notifications':
|
||||
case 'prune_delete_days':
|
||||
case 'position':
|
||||
case 'bitrate':
|
||||
case 'rate_limit_per_user':
|
||||
case 'color':
|
||||
case 'max_uses':
|
||||
case 'uses':
|
||||
case 'max_age':
|
||||
case 'expire_behavior':
|
||||
case 'expire_grace_period':
|
||||
case 'user_limit':
|
||||
case 'privacy_level':
|
||||
case 'entity_type':
|
||||
case 'status':
|
||||
return {
|
||||
key: change.key,
|
||||
old_value: change.old ? Number(change.old) : '',
|
||||
new_value: change.new ? Number(change.new) : ''
|
||||
}
|
||||
case 'widget_enabled':
|
||||
case 'nsfw':
|
||||
case 'hoist':
|
||||
case 'mentionable':
|
||||
case 'temporary':
|
||||
case 'deaf':
|
||||
case 'mute':
|
||||
case 'enable_emoticons':
|
||||
return {
|
||||
key: change.key,
|
||||
old_value: change.old,
|
||||
new_value: change.new
|
||||
}
|
||||
case 'permission_overwrites':
|
||||
return {
|
||||
key: change.key,
|
||||
old_value: change.old,
|
||||
new_value: change.new
|
||||
}
|
||||
default:
|
||||
return {
|
||||
key: change.key,
|
||||
old_value: change.old,
|
||||
new_value: change.new
|
||||
}
|
||||
}
|
||||
}),
|
||||
user_id: payload.userId
|
||||
? rest.transformers.reverse.snowflake(payload.userId)
|
||||
: null,
|
||||
target_id: payload.targetId
|
||||
? rest.transformers.reverse.snowflake(payload.targetId)
|
||||
: null,
|
||||
action_type: payload.actionType,
|
||||
options: payload.options
|
||||
? {
|
||||
// respect transformer as reference than type
|
||||
auto_moderation_rule_name: payload.options.autoModerationRuleName,
|
||||
auto_moderation_rule_trigger_type:
|
||||
payload.options.autoModerationRuleTriggerType,
|
||||
delete_member_days:
|
||||
payload.options.deleteMemberDays === 0
|
||||
? payload.options.deleteMemberDays.toString()
|
||||
: '',
|
||||
members_removed:
|
||||
payload.options.membersRemoved === 0
|
||||
? payload.options.membersRemoved.toString()
|
||||
: '',
|
||||
channel_id: payload.options.channelId
|
||||
? rest.transformers.reverse.snowflake(payload.options.channelId)
|
||||
: '',
|
||||
message_id: payload.options.messageId
|
||||
? rest.transformers.reverse.snowflake(payload.options.messageId)
|
||||
: '',
|
||||
count:
|
||||
payload.options.count === 0 ? payload.options.count.toString() : '',
|
||||
id: payload.options.id
|
||||
? rest.transformers.reverse.snowflake(payload.options.id)
|
||||
: '',
|
||||
type: payload.options.type.toString(),
|
||||
role_name: payload.options.roleName,
|
||||
// make up value to make ts shut up, the orginal value do not persevere in transformer
|
||||
application_id: ''
|
||||
}
|
||||
: undefined,
|
||||
reason: payload.reason
|
||||
}
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
import type { DiscordComponent } from '@discordeno/types'
|
||||
import type { RestManager } from '../../restManager.js'
|
||||
import type { Component } from '../component.js'
|
||||
|
||||
export function transformComponentToDiscordComponent (
|
||||
rest: RestManager,
|
||||
payload: Component
|
||||
): DiscordComponent {
|
||||
return {
|
||||
type: payload.type,
|
||||
custom_id: payload.customId,
|
||||
disabled: payload.disabled,
|
||||
required: payload.required,
|
||||
style: payload.style,
|
||||
label: payload.label,
|
||||
emoji: payload.emoji
|
||||
? {
|
||||
id: payload.emoji.id?.toString(),
|
||||
name: payload.emoji.name,
|
||||
animated: payload.emoji.animated
|
||||
}
|
||||
: undefined,
|
||||
url: payload.url,
|
||||
options: payload.options?.map((option) => ({
|
||||
label: option.label,
|
||||
value: option.value,
|
||||
description: option.description,
|
||||
emoji: option.emoji
|
||||
? {
|
||||
id: option.emoji.id?.toString(),
|
||||
name: option.emoji.name,
|
||||
animated: option.emoji.animated
|
||||
}
|
||||
: undefined,
|
||||
default: option.default
|
||||
})),
|
||||
placeholder: payload.placeholder,
|
||||
min_values: payload.minValues,
|
||||
max_values: payload.maxValues,
|
||||
min_length: payload.minLength,
|
||||
max_length: payload.maxLength,
|
||||
value: payload.value,
|
||||
components: payload.components?.map((component) =>
|
||||
rest.transformers.reverse.component(rest, component)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
import type { DiscordCreateApplicationCommand } from '@discordeno/types'
|
||||
import { calculateBits } from '@discordeno/utils'
|
||||
import type { RestManager } from '../../restManager.js'
|
||||
import type { CreateApplicationCommand } from '../../types.js'
|
||||
import { isContextApplicationCommand } from '../../types.js'
|
||||
|
||||
export function transformCreateApplicationCommandToDiscordCreateApplicationCommand (
|
||||
rest: RestManager,
|
||||
payload: CreateApplicationCommand
|
||||
): DiscordCreateApplicationCommand {
|
||||
if (isContextApplicationCommand(payload)) {
|
||||
return {
|
||||
name: payload.name,
|
||||
name_localizations: payload.nameLocalizations,
|
||||
description: '',
|
||||
description_localizations: {},
|
||||
type: payload.type,
|
||||
default_member_permissions: payload.defaultMemberPermissions
|
||||
? calculateBits(payload.defaultMemberPermissions)
|
||||
: null,
|
||||
dm_permission: payload.dmPermission
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
name: payload.name,
|
||||
name_localizations: payload.nameLocalizations,
|
||||
description: payload.description,
|
||||
description_localizations: payload.descriptionLocalizations,
|
||||
type: payload.type,
|
||||
options: payload.options?.map((option) =>
|
||||
rest.transformers.reverse.applicationCommandOption(rest, option)
|
||||
),
|
||||
default_member_permissions: payload.defaultMemberPermissions
|
||||
? calculateBits(payload.defaultMemberPermissions)
|
||||
: null,
|
||||
dm_permission: payload.dmPermission
|
||||
}
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
import type { DiscordEmbed } from '@discordeno/types'
|
||||
import type { RestManager } from '../../restManager.js'
|
||||
import type { Embed } from '../embed.js'
|
||||
|
||||
export function transformEmbedToDiscordEmbed (
|
||||
rest: RestManager,
|
||||
payload: Embed
|
||||
): DiscordEmbed {
|
||||
return {
|
||||
title: payload.title,
|
||||
type: payload.type,
|
||||
description: payload.description,
|
||||
url: payload.url,
|
||||
timestamp: payload.timestamp
|
||||
? new Date(payload.timestamp).toISOString()
|
||||
: undefined,
|
||||
color: payload.color,
|
||||
footer: payload.footer
|
||||
? {
|
||||
text: payload.footer.text,
|
||||
icon_url: payload.footer.iconUrl,
|
||||
proxy_icon_url: payload.footer.proxyIconUrl
|
||||
}
|
||||
: undefined,
|
||||
image: payload.image
|
||||
? {
|
||||
url: payload.image.url,
|
||||
proxy_url: payload.image.proxyUrl,
|
||||
height: payload.image.height,
|
||||
width: payload.image.width
|
||||
}
|
||||
: undefined,
|
||||
thumbnail: payload.thumbnail
|
||||
? {
|
||||
url: payload.thumbnail.url,
|
||||
proxy_url: payload.thumbnail.proxyUrl,
|
||||
height: payload.thumbnail.height,
|
||||
width: payload.thumbnail.width
|
||||
}
|
||||
: undefined,
|
||||
video: payload.video
|
||||
? {
|
||||
url: payload.video.url,
|
||||
proxy_url: payload.video.proxyUrl,
|
||||
height: payload.video.height,
|
||||
width: payload.video.width
|
||||
}
|
||||
: undefined,
|
||||
provider: payload.provider,
|
||||
author: payload.author
|
||||
? {
|
||||
name: payload.author.name,
|
||||
url: payload.author.url,
|
||||
icon_url: payload.author.iconUrl,
|
||||
proxy_icon_url: payload.author.proxyIconUrl
|
||||
}
|
||||
: undefined,
|
||||
fields: payload.fields
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
import type { DiscordEmoji } from '@discordeno/types'
|
||||
import type { RestManager } from '../../restManager.js'
|
||||
import type { Emoji } from '../emoji.js'
|
||||
|
||||
export function transformEmojiToDiscordEmoji (
|
||||
rest: RestManager,
|
||||
payload: Emoji
|
||||
): DiscordEmoji {
|
||||
return {
|
||||
id: payload.id
|
||||
? rest.transformers.reverse.snowflake(payload.id)
|
||||
: undefined,
|
||||
name: payload.name,
|
||||
roles: payload.roles?.map((id) => rest.transformers.reverse.snowflake(id)),
|
||||
user: payload.user
|
||||
? rest.transformers.reverse.user(rest, payload.user)
|
||||
: undefined,
|
||||
require_colons: payload.toggles.requireColons,
|
||||
managed: payload.toggles.managed,
|
||||
animated: payload.toggles.animated,
|
||||
available: payload.toggles.available
|
||||
}
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
import type { DiscordGetGatewayBot, GetGatewayBot } from '@discordeno/types'
|
||||
|
||||
export function transformGatewayBotToDiscordGatewayBot (
|
||||
payload: GetGatewayBot
|
||||
): DiscordGetGatewayBot {
|
||||
return {
|
||||
url: payload.url,
|
||||
shards: payload.shards,
|
||||
session_start_limit: {
|
||||
total: payload.sessionStartLimit.total,
|
||||
remaining: payload.sessionStartLimit.remaining,
|
||||
reset_after: payload.sessionStartLimit.resetAfter,
|
||||
max_concurrency: payload.sessionStartLimit.maxConcurrency
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
export * from './activity.js'
|
||||
export * from './allowedMentions.js'
|
||||
export * from './application.js'
|
||||
export * from './applicationCommand.js'
|
||||
export * from './applicationCommandOption.js'
|
||||
export * from './applicationCommandOptionChoice.js'
|
||||
export * from './applicationCommandPermission.js'
|
||||
export * from './attachment.js'
|
||||
export * from './auditLogEntry.js'
|
||||
export * from './component.js'
|
||||
export * from './createApplicationCommand.js'
|
||||
export * from './embed.js'
|
||||
export * from './emoji.js'
|
||||
export * from './gatewayBot.js'
|
||||
export * from './interactionResponse.js'
|
||||
export * from './member.js'
|
||||
export * from './presence.js'
|
||||
export * from './team.js'
|
||||
export * from './widgetSettings.js'
|
||||
@@ -1,42 +0,0 @@
|
||||
import type { DiscordInteractionResponse } from '@discordeno/types'
|
||||
import type { RestManager } from '../../restManager.js'
|
||||
import type { InteractionResponse } from '../../types'
|
||||
|
||||
export function transformInteractionResponseToDiscordInteractionResponse (
|
||||
rest: RestManager,
|
||||
payload: InteractionResponse
|
||||
): DiscordInteractionResponse {
|
||||
// If no mentions are provided, force disable mentions
|
||||
if (payload.data && payload.data?.allowedMentions == null) {
|
||||
payload.data.allowedMentions = { parse: [] }
|
||||
}
|
||||
|
||||
return {
|
||||
type: payload.type,
|
||||
data: payload.data
|
||||
? {
|
||||
tts: payload.data.tts,
|
||||
title: payload.data.title,
|
||||
flags: payload.data.flags,
|
||||
content: payload.data.content,
|
||||
choices: payload.data.choices?.map((choice) =>
|
||||
rest.transformers.reverse.applicationCommandOptionChoice(
|
||||
rest,
|
||||
choice
|
||||
)
|
||||
),
|
||||
custom_id: payload.data.customId,
|
||||
embeds: payload.data.embeds?.map((embed) =>
|
||||
rest.transformers.reverse.embed(rest, embed)
|
||||
),
|
||||
allowed_mentions: rest.transformers.reverse.allowedMentions(
|
||||
rest,
|
||||
payload.data.allowedMentions!
|
||||
),
|
||||
components: payload.data.components?.map((component) =>
|
||||
rest.transformers.reverse.component(rest, component)
|
||||
)
|
||||
}
|
||||
: undefined
|
||||
}
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
import type { DiscordMember, DiscordUser } from '@discordeno/types'
|
||||
import { bigintToSnowflake, iconBigintToHash } from '@discordeno/utils'
|
||||
import type { RestManager } from '../../restManager.js'
|
||||
import type { Member, User } from '../member.js'
|
||||
|
||||
export function transformUserToDiscordUser (
|
||||
rest: RestManager,
|
||||
payload: User
|
||||
): DiscordUser {
|
||||
return {
|
||||
id: bigintToSnowflake(payload.id),
|
||||
username: payload.username,
|
||||
discriminator: payload.discriminator,
|
||||
avatar: payload.avatar ? iconBigintToHash(payload.avatar) : null,
|
||||
locale: payload.locale,
|
||||
email: payload.email ?? undefined,
|
||||
flags: payload.flags,
|
||||
premium_type: payload.premiumType,
|
||||
public_flags: payload.publicFlags,
|
||||
bot: payload.toggles.bot,
|
||||
system: payload.toggles.system,
|
||||
mfa_enabled: payload.toggles.mfaEnabled,
|
||||
verified: payload.toggles.verified
|
||||
}
|
||||
}
|
||||
|
||||
export function transformMemberToDiscordMember (
|
||||
rest: RestManager,
|
||||
payload: Member
|
||||
): DiscordMember {
|
||||
return {
|
||||
nick: payload.nick ?? undefined,
|
||||
roles: payload.roles.map((id) => bigintToSnowflake(id)),
|
||||
joined_at: new Date(payload.joinedAt).toISOString(),
|
||||
premium_since: payload.premiumSince
|
||||
? new Date(payload.premiumSince).toISOString()
|
||||
: undefined,
|
||||
avatar: payload.avatar ? iconBigintToHash(payload.avatar) : undefined,
|
||||
permissions: payload.permissions
|
||||
? bigintToSnowflake(payload.permissions)
|
||||
: undefined,
|
||||
communication_disabled_until: payload.communicationDisabledUntil
|
||||
? new Date(payload.communicationDisabledUntil).toISOString()
|
||||
: undefined,
|
||||
deaf: payload.toggles.deaf,
|
||||
mute: payload.toggles.mute,
|
||||
pending: payload.toggles.pending
|
||||
}
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
import type { DiscordPresenceUpdate } from '@discordeno/types'
|
||||
import { PresenceStatus } from '@discordeno/types'
|
||||
import type { RestManager } from '../../restManager.js'
|
||||
import type { PresenceUpdate } from '../presence.js'
|
||||
|
||||
export const reverseStatusTypes = Object.freeze({
|
||||
0: 'online',
|
||||
1: 'dnd',
|
||||
2: 'idle',
|
||||
4: 'offline'
|
||||
} as const)
|
||||
|
||||
export function transformPresenceToDiscordPresence (
|
||||
rest: RestManager,
|
||||
payload: PresenceUpdate
|
||||
): DiscordPresenceUpdate {
|
||||
return {
|
||||
user: rest.transformers.reverse.user(rest, payload.user),
|
||||
guild_id: rest.transformers.reverse.snowflake(payload.guildId),
|
||||
// TODO: find better way
|
||||
status: (PresenceStatus[payload.status] ?? 'offline') as 'offline',
|
||||
activities: payload.activities.map((activity) =>
|
||||
rest.transformers.reverse.activity(rest, activity)
|
||||
),
|
||||
client_status: {
|
||||
desktop: payload.desktop,
|
||||
mobile: payload.mobile,
|
||||
web: payload.web
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
import type { DiscordTeam } from '@discordeno/types'
|
||||
import { bigintToSnowflake, iconBigintToHash } from '@discordeno/utils'
|
||||
import type { RestManager } from '../../restManager.js'
|
||||
import type { Team } from '../team.js'
|
||||
|
||||
export function transformTeamToDiscordTeam (
|
||||
rest: RestManager,
|
||||
payload: Team
|
||||
): DiscordTeam {
|
||||
const id = bigintToSnowflake(payload.id)
|
||||
|
||||
return {
|
||||
name: payload.name,
|
||||
|
||||
id,
|
||||
icon: payload.icon ? iconBigintToHash(payload.icon) : null,
|
||||
owner_user_id: bigintToSnowflake(payload.ownerUserId),
|
||||
members: payload.members.map((member) => ({
|
||||
membership_state: member.membershipState,
|
||||
permissions: member.permissions,
|
||||
team_id: id,
|
||||
user: rest.transformers.reverse.user(rest, member.user)
|
||||
}))
|
||||
}
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
import type { DiscordGuildWidgetSettings } from '@discordeno/types'
|
||||
import type { RestManager } from '../../restManager.js'
|
||||
import type { GuildWidgetSettings } from '../widgetSettings.js'
|
||||
|
||||
export function transformWidgetSettingsToDiscordWidgetSettings (
|
||||
bot: RestManager,
|
||||
payload: GuildWidgetSettings
|
||||
): DiscordGuildWidgetSettings {
|
||||
return {
|
||||
enabled: payload.enabled,
|
||||
channel_id: payload.channelId ?? null
|
||||
}
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
import type { DiscordRole, Optionalize } from '@discordeno/types'
|
||||
import { iconHashToBigInt } from '@discordeno/utils'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
import { RoleToggles } from './toggles/role.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformRole (
|
||||
rest: RestManager,
|
||||
payload: { role: DiscordRole } & { guildId: bigint }
|
||||
) {
|
||||
const role = {
|
||||
name: payload.role.name,
|
||||
guildId: payload.guildId,
|
||||
position: payload.role.position,
|
||||
color: payload.role.color,
|
||||
toggles: new RoleToggles(payload.role),
|
||||
|
||||
id: rest.transformers.snowflake(payload.role.id),
|
||||
botId: payload.role.tags?.bot_id
|
||||
? rest.transformers.snowflake(payload.role.tags.bot_id)
|
||||
: undefined,
|
||||
integrationId: payload.role.tags?.integration_id
|
||||
? rest.transformers.snowflake(payload.role.tags.integration_id)
|
||||
: undefined,
|
||||
permissions: rest.transformers.snowflake(payload.role.permissions),
|
||||
icon: payload.role.icon ? iconHashToBigInt(payload.role.icon) : undefined,
|
||||
unicodeEmoji: payload.role.unicode_emoji
|
||||
}
|
||||
|
||||
return role as Optionalize<typeof role>
|
||||
}
|
||||
|
||||
export interface Role extends ReturnType<typeof transformRole> {}
|
||||
@@ -1,44 +0,0 @@
|
||||
import type { DiscordScheduledEvent, Optionalize } from '@discordeno/types'
|
||||
import { iconHashToBigInt } from '@discordeno/utils'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformScheduledEvent (
|
||||
rest: RestManager,
|
||||
payload: DiscordScheduledEvent
|
||||
) {
|
||||
const scheduledEvent = {
|
||||
id: rest.transformers.snowflake(payload.id),
|
||||
guildId: rest.transformers.snowflake(payload.guild_id),
|
||||
channelId: payload.channel_id
|
||||
? rest.transformers.snowflake(payload.channel_id)
|
||||
: undefined,
|
||||
creatorId: payload.creator_id
|
||||
? rest.transformers.snowflake(payload.creator_id)
|
||||
: 0n,
|
||||
scheduledStartTime: Date.parse(payload.scheduled_start_time),
|
||||
scheduledEndTime: payload.scheduled_end_time
|
||||
? Date.parse(payload.scheduled_end_time)
|
||||
: undefined,
|
||||
entityId: payload.entity_id
|
||||
? rest.transformers.snowflake(payload.entity_id)
|
||||
: undefined,
|
||||
creator: payload.creator
|
||||
? rest.transformers.user(rest, payload.creator)
|
||||
: undefined,
|
||||
|
||||
name: payload.name,
|
||||
description: payload.description,
|
||||
privacyLevel: payload.privacy_level,
|
||||
status: payload.status,
|
||||
entityType: payload.entity_type,
|
||||
userCount: payload.user_count ?? 0,
|
||||
location: payload.entity_metadata?.location,
|
||||
image: payload.image ? iconHashToBigInt(payload.image) : undefined
|
||||
}
|
||||
|
||||
return scheduledEvent as Optionalize<typeof scheduledEvent>
|
||||
}
|
||||
|
||||
export interface ScheduledEvent
|
||||
extends ReturnType<typeof transformScheduledEvent> {}
|
||||
@@ -1,23 +0,0 @@
|
||||
import type { DiscordStageInstance, Optionalize } from '@discordeno/types'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformStageInstance (
|
||||
rest: RestManager,
|
||||
payload: DiscordStageInstance
|
||||
) {
|
||||
const stageInstance = {
|
||||
id: rest.transformers.snowflake(payload.id),
|
||||
guildId: rest.transformers.snowflake(payload.guild_id),
|
||||
channelId: rest.transformers.snowflake(payload.channel_id),
|
||||
topic: payload.topic,
|
||||
guildScheduledEventId: payload.guild_scheduled_event_id
|
||||
? rest.transformers.snowflake(payload.guild_scheduled_event_id)
|
||||
: undefined
|
||||
}
|
||||
|
||||
return stageInstance as Optionalize<typeof stageInstance>
|
||||
}
|
||||
|
||||
export interface StageInstance
|
||||
extends ReturnType<typeof transformStageInstance> {}
|
||||
@@ -1,53 +0,0 @@
|
||||
import type {
|
||||
DiscordSticker,
|
||||
DiscordStickerPack,
|
||||
Optionalize
|
||||
} from '@discordeno/types'
|
||||
import { snowflakeToBigint } from '@discordeno/utils'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformSticker (rest: RestManager, payload: DiscordSticker) {
|
||||
const sticker = {
|
||||
id: snowflakeToBigint(payload.id),
|
||||
packId: payload.pack_id ? snowflakeToBigint(payload.pack_id) : undefined,
|
||||
name: payload.name,
|
||||
description: payload.description,
|
||||
tags: payload.tags,
|
||||
type: payload.type,
|
||||
formatType: payload.format_type,
|
||||
available: payload.available,
|
||||
guildId: payload.guild_id ? snowflakeToBigint(payload.guild_id) : undefined,
|
||||
user: payload.user ? rest.transformers.user(rest, payload.user) : undefined,
|
||||
sortValue: payload.sort_value
|
||||
}
|
||||
|
||||
return sticker as Optionalize<typeof sticker>
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformStickerPack (
|
||||
rest: RestManager,
|
||||
payload: DiscordStickerPack
|
||||
) {
|
||||
const pack = {
|
||||
id: rest.transformers.snowflake(payload.id),
|
||||
stickers: payload.stickers.map((sticker) =>
|
||||
rest.transformers.sticker(rest, sticker)
|
||||
),
|
||||
name: payload.name,
|
||||
skuId: rest.transformers.snowflake(payload.sku_id),
|
||||
coverStickerId: payload.cover_sticker_id
|
||||
? rest.transformers.snowflake(payload.cover_sticker_id)
|
||||
: undefined,
|
||||
description: payload.description,
|
||||
bannerAssetId: payload.banner_asset_id
|
||||
? rest.transformers.snowflake(payload.banner_asset_id)
|
||||
: undefined
|
||||
}
|
||||
|
||||
return pack as Optionalize<typeof pack>
|
||||
}
|
||||
|
||||
export interface Sticker extends ReturnType<typeof transformSticker> {}
|
||||
export interface StickerPack extends ReturnType<typeof transformStickerPack> {}
|
||||
@@ -1,26 +0,0 @@
|
||||
import type { DiscordTeam, Optionalize } from '@discordeno/types'
|
||||
import { iconHashToBigInt } from '@discordeno/utils'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformTeam (rest: RestManager, payload: DiscordTeam) {
|
||||
const id = rest.transformers.snowflake(payload.id)
|
||||
|
||||
const team = {
|
||||
name: payload.name,
|
||||
|
||||
id,
|
||||
icon: payload.icon ? iconHashToBigInt(payload.icon) : undefined,
|
||||
ownerUserId: rest.transformers.snowflake(payload.owner_user_id),
|
||||
members: payload.members.map((member) => ({
|
||||
membershipState: member.membership_state,
|
||||
permissions: member.permissions,
|
||||
teamId: id,
|
||||
user: rest.transformers.user(rest, member.user)
|
||||
}))
|
||||
}
|
||||
|
||||
return team as Optionalize<typeof team>
|
||||
}
|
||||
|
||||
export interface Team extends ReturnType<typeof transformTeam> {}
|
||||
@@ -1,23 +0,0 @@
|
||||
import type { DiscordTemplate, Optionalize } from '@discordeno/types'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformTemplate (rest: RestManager, payload: DiscordTemplate) {
|
||||
const template = {
|
||||
code: payload.code,
|
||||
name: payload.name,
|
||||
description: payload.description,
|
||||
usageCount: payload.usage_count,
|
||||
creatorId: rest.transformers.snowflake(payload.creator_id),
|
||||
creator: rest.transformers.user(rest, payload.creator),
|
||||
createdAt: Date.parse(payload.created_at),
|
||||
updatedAt: Date.parse(payload.updated_at),
|
||||
sourceGuildId: rest.transformers.snowflake(payload.source_guild_id),
|
||||
serializedSourceGuild: payload.serialized_source_guild,
|
||||
isDirty: payload.is_dirty ?? undefined
|
||||
}
|
||||
|
||||
return template as Optionalize<typeof template>
|
||||
}
|
||||
|
||||
export interface Template extends ReturnType<typeof transformTemplate> {}
|
||||
@@ -1,40 +0,0 @@
|
||||
import type {
|
||||
DiscordThreadMember,
|
||||
DiscordThreadMemberGuildCreate,
|
||||
Optionalize
|
||||
} from '@discordeno/types'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformThreadMember (
|
||||
rest: RestManager,
|
||||
payload: DiscordThreadMember
|
||||
) {
|
||||
const threadMember = {
|
||||
id: payload.id ? rest.transformers.snowflake(payload.id) : undefined,
|
||||
userId: payload.user_id
|
||||
? rest.transformers.snowflake(payload.user_id)
|
||||
: undefined,
|
||||
joinTimestamp: Date.parse(payload.join_timestamp),
|
||||
flags: payload.flags
|
||||
}
|
||||
|
||||
return threadMember as Optionalize<typeof threadMember>
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformThreadMemberGuildCreate (
|
||||
rest: RestManager,
|
||||
payload: DiscordThreadMemberGuildCreate
|
||||
) {
|
||||
const threadMember = {
|
||||
joinTimestamp: Date.parse(payload.join_timestamp)
|
||||
}
|
||||
|
||||
return threadMember as Optionalize<typeof threadMember>
|
||||
}
|
||||
|
||||
export interface ThreadMember
|
||||
extends ReturnType<typeof transformThreadMember> {}
|
||||
export interface ThreadMemberGuildCreate
|
||||
extends ReturnType<typeof transformThreadMemberGuildCreate> {}
|
||||
@@ -1,22 +0,0 @@
|
||||
import type { DiscordVoiceRegion, Optionalize } from '@discordeno/types'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
|
||||
// TODO: Rename `VoiceRegions` to `VoiceRegion`.
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformVoiceRegion (
|
||||
rest: RestManager,
|
||||
payload: DiscordVoiceRegion
|
||||
) {
|
||||
const voiceRegion = {
|
||||
id: payload.id,
|
||||
name: payload.name,
|
||||
optimal: payload.optimal,
|
||||
deprecated: payload.deprecated,
|
||||
custom: payload.custom
|
||||
}
|
||||
|
||||
return voiceRegion as Optionalize<typeof voiceRegion>
|
||||
}
|
||||
|
||||
export interface VoiceRegions extends ReturnType<typeof transformVoiceRegion> {}
|
||||
@@ -1,34 +0,0 @@
|
||||
import type { DiscordVoiceState, Optionalize } from '@discordeno/types'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
import { VoiceStateToggles } from './toggles/voice.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformVoiceState (
|
||||
rest: RestManager,
|
||||
payload: { voiceState: DiscordVoiceState } & { guildId: bigint }
|
||||
) {
|
||||
const voiceState = {
|
||||
toggles: new VoiceStateToggles(payload.voiceState),
|
||||
|
||||
requestToSpeakTimestamp: payload.voiceState.request_to_speak_timestamp
|
||||
? Date.parse(payload.voiceState.request_to_speak_timestamp)
|
||||
: undefined,
|
||||
sessionId: payload.voiceState.session_id,
|
||||
|
||||
channelId: payload.voiceState.channel_id
|
||||
? rest.transformers.snowflake(payload.voiceState.channel_id)
|
||||
: undefined,
|
||||
guildId:
|
||||
payload.guildId ||
|
||||
(payload.voiceState.guild_id
|
||||
? rest.transformers.snowflake(payload.voiceState.guild_id)
|
||||
: 0n),
|
||||
userId: payload.voiceState.user_id
|
||||
? rest.transformers.snowflake(payload.voiceState.user_id)
|
||||
: 0n
|
||||
}
|
||||
|
||||
return voiceState as Optionalize<typeof voiceState>
|
||||
}
|
||||
|
||||
export interface VoiceState extends ReturnType<typeof transformVoiceState> {}
|
||||
@@ -1,46 +0,0 @@
|
||||
import type { DiscordWebhook, Optionalize } from '@discordeno/types'
|
||||
import { iconHashToBigInt } from '@discordeno/utils'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformWebhook (rest: RestManager, payload: DiscordWebhook) {
|
||||
const webhook = {
|
||||
id: rest.transformers.snowflake(payload.id),
|
||||
type: payload.type,
|
||||
guildId: payload.guild_id
|
||||
? rest.transformers.snowflake(payload.guild_id)
|
||||
: undefined,
|
||||
channelId: payload.channel_id
|
||||
? rest.transformers.snowflake(payload.channel_id)
|
||||
: undefined,
|
||||
user: payload.user ? rest.transformers.user(rest, payload.user) : undefined,
|
||||
name: payload.name ?? '',
|
||||
avatar: payload.avatar ? iconHashToBigInt(payload.avatar) : undefined,
|
||||
token: payload.token,
|
||||
applicationId: payload.application_id
|
||||
? rest.transformers.snowflake(payload.application_id)
|
||||
: undefined,
|
||||
sourceGuild: payload.source_guild
|
||||
? {
|
||||
id: rest.transformers.snowflake(payload.source_guild.id!),
|
||||
name: payload.source_guild.name!,
|
||||
icon: payload.source_guild.icon
|
||||
? iconHashToBigInt(payload.source_guild.icon)
|
||||
: undefined
|
||||
}
|
||||
: undefined,
|
||||
/** The channel that this webhook is following (returned for Channel Follower Webhooks) */
|
||||
sourceChannel: payload.source_channel
|
||||
? {
|
||||
id: rest.transformers.snowflake(payload.source_channel.id!),
|
||||
name: payload.source_channel.name ?? ''
|
||||
}
|
||||
: undefined,
|
||||
/** The url used for executing the webhook (returned by the webhooks OAuth2 flow) */
|
||||
url: payload.url
|
||||
}
|
||||
|
||||
return webhook as Optionalize<typeof webhook>
|
||||
}
|
||||
|
||||
export interface Webhook extends ReturnType<typeof transformWebhook> {}
|
||||
@@ -1,25 +0,0 @@
|
||||
import type { DiscordWelcomeScreen, Optionalize } from '@discordeno/types'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformWelcomeScreen (
|
||||
rest: RestManager,
|
||||
payload: DiscordWelcomeScreen
|
||||
) {
|
||||
const welcomeScreen = {
|
||||
description: payload.description ?? undefined,
|
||||
welcomeChannels: payload.welcome_channels.map((channel) => ({
|
||||
channelId: rest.transformers.snowflake(channel.channel_id),
|
||||
description: channel.description,
|
||||
emojiId: channel.emoji_id
|
||||
? rest.transformers.snowflake(channel.emoji_id)
|
||||
: undefined,
|
||||
emojiName: channel.emoji_name ?? undefined
|
||||
}))
|
||||
}
|
||||
|
||||
return welcomeScreen as Optionalize<typeof welcomeScreen>
|
||||
}
|
||||
|
||||
export interface WelcomeScreen
|
||||
extends ReturnType<typeof transformWelcomeScreen> {}
|
||||
@@ -1,33 +0,0 @@
|
||||
import type { DiscordGuildWidget, Optionalize } from '@discordeno/types'
|
||||
import { iconHashToBigInt } from '@discordeno/utils'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformWidget (
|
||||
rest: RestManager,
|
||||
payload: DiscordGuildWidget
|
||||
) {
|
||||
const widget = {
|
||||
id: rest.transformers.snowflake(payload.id),
|
||||
name: payload.name,
|
||||
instant_invite: payload.instant_invite,
|
||||
channels: payload.channels.map((channel) => ({
|
||||
id: rest.transformers.snowflake(channel.id),
|
||||
name: channel.name,
|
||||
position: channel.position
|
||||
})),
|
||||
members: payload.members.map((member) => ({
|
||||
id: rest.transformers.snowflake(member.id),
|
||||
username: member.username,
|
||||
discriminator: member.discriminator,
|
||||
avatar: member.avatar ? iconHashToBigInt(member.avatar) : undefined,
|
||||
status: member.status,
|
||||
avatarUrl: member.avatar_url
|
||||
})),
|
||||
presenceCount: payload.presence_count
|
||||
}
|
||||
|
||||
return widget as Optionalize<typeof widget>
|
||||
}
|
||||
|
||||
export interface GuildWidget extends ReturnType<typeof transformWidget> {}
|
||||
@@ -1,21 +0,0 @@
|
||||
import type {
|
||||
DiscordGuildWidgetSettings,
|
||||
Optionalize
|
||||
} from '@discordeno/types'
|
||||
import type { RestManager } from '../restManager.js'
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
||||
export function transformWidgetSettings (
|
||||
rest: RestManager,
|
||||
payload: DiscordGuildWidgetSettings
|
||||
) {
|
||||
const widget = {
|
||||
enabled: payload.enabled,
|
||||
channelId: payload.channel_id ?? undefined
|
||||
}
|
||||
|
||||
return widget as Optionalize<typeof widget>
|
||||
}
|
||||
|
||||
export interface GuildWidgetSettings
|
||||
extends ReturnType<typeof transformWidgetSettings> {}
|
||||
Reference in New Issue
Block a user