Socket
Socket
Sign inDemoInstall

discord-slim

Package Overview
Dependencies
4
Maintainers
1
Versions
68
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 2.0.0-dev.14 to 2.0.0-dev.15

dist/voice.d.ts

10

dist/client.d.ts
/// <reference types="node" />
import { EventEmitter } from 'events';
import * as helpers from './helpers';
import { Intents, ActivityTypes, StatusTypes } from './helpers';
import { Authorization } from './request';
import { EventHandler } from './events';
import type { EventHandler } from './events';
import type { User } from './types';

@@ -28,3 +28,3 @@ export declare class Client extends EventEmitter {

private _onError;
Connect: (authorization: Authorization, intents?: helpers.Intents | undefined, shard?: {
Connect: (authorization: Authorization, intents?: Intents | undefined, shard?: {
id: number;

@@ -54,6 +54,6 @@ total: number;

name: string;
type: helpers.ActivityTypes;
type: ActivityTypes;
url?: string;
}[] | null;
status: helpers.StatusTypes;
status: StatusTypes;
afk: boolean;

@@ -60,0 +60,0 @@ }) => void;

"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {

@@ -28,5 +9,6 @@ return (mod && mod.__esModule) ? mod : { "default": mod };

const events_1 = require("events");
const helpers = __importStar(require("./helpers"));
const helpers_1 = require("./helpers");
const util_1 = require("./util");
const request_1 = require("./request");
const fatalCodes = [4004, 4010, 4011, 4012, 4013, 4014], dropCodes = [4007, 4009];
class Client extends events_1.EventEmitter {

@@ -46,7 +28,9 @@ constructor() {

const response = await util_1.SafePromise(request_1.Request('GET', '/gateway/bot', this._auth));
if (this._ws)
return this.emit(ClientEvents.WARN, 'Client already connected.');
if (!response)
return this.emit('fatal', 'Unable to retrieve a gateway.');
return this.emit(ClientEvents.FATAL, 'Unable to retrieve a gateway.');
if (typeof response.url != 'string')
return this.emit('fatal', 'Unexpected gateway API response.');
this._ws = new ws_1.default(`${response.url}?v=${helpers.API_VERSION}`);
return this.emit(ClientEvents.FATAL, 'Unexpected gateway API response.');
this._ws = new ws_1.default(`${response.url}?v=${helpers_1.API_VERSION}`);
this._ws.on('message', this._onMessage);

@@ -59,3 +43,3 @@ this._ws.on('close', this._onClose);

return;
this.emit('disconnect', code);
this.emit(ClientEvents.DISCONNECT, code);
this._setHeartbeatTimer();

@@ -68,59 +52,56 @@ this._ws.removeAllListeners();

this._onMessage = (data) => {
if (typeof data != 'string')
data = data.toString();
const intent = util_1.SafeJsonParse(data);
const intent = util_1.SafeJsonParse(data.toString());
if (!intent)
return;
if (intent.op == 0) {
if (intent.s && (intent.s > this._lastSequence))
this._lastSequence = intent.s;
if (intent.t == "READY") {
this._user = intent.d.user;
this._sessionId = intent.d.session_id;
switch (intent.op) {
case 0:
if (intent.s && (intent.s > this._lastSequence))
this._lastSequence = intent.s;
switch (intent.t) {
case "READY":
this._user = intent.d.user;
this._sessionId = intent.d.session_id;
this.emit(ClientEvents.CONNECT);
break;
case "RESUMED":
this.emit(ClientEvents.CONNECT);
break;
}
this.emit(ClientEvents.INTENT, intent);
this._eventHandler.emit(intent.t, intent.d);
break;
case 10:
this._identify();
this._lastHeartbeatAck = true;
this._setHeartbeatTimer(intent.d.heartbeat_interval);
this._sendHeartbeat();
this.emit('connect');
}
else if (intent.t == "RESUMED") {
break;
case 11:
this._lastHeartbeatAck = true;
break;
case 1:
this._sendHeartbeat();
this.emit('connect');
}
this.emit('intent', intent);
this._eventHandler.emit(intent.t, intent.d);
break;
case 9:
this.emit(ClientEvents.WARN, `Invalid session. Resumable: ${intent.d}`);
this._wsConnect(intent.d);
break;
case 7:
this.emit(ClientEvents.WARN, 'Server forced reconnect.');
this._wsConnect(true);
break;
}
else if (intent.op == 10) {
this._identify();
this._lastHeartbeatAck = true;
this._setHeartbeatTimer(intent.d.heartbeat_interval);
}
else if (intent.op == 11) {
this._lastHeartbeatAck = true;
}
else if (intent.op == 1) {
this._sendHeartbeat();
}
else if (intent.op == 9) {
this.emit('warn', `Invalid session. Resumable: ${intent.d}`);
this._wsConnect(intent.d);
}
else if (intent.op == 7) {
this.emit('warn', 'Server forced reconnect.');
this._wsConnect(true);
}
};
this._identify = () => {
this._sessionId ?
this._send(6, {
token: this._auth?.authorization.token,
session_id: this._sessionId,
seq: this._lastSequence,
}) :
this._send(2, {
token: this._auth?.authorization.token,
properties: { $os: 'linux', $browser: 'bot', $device: 'bot' },
intents: this._intents ?? helpers.Intents.SYSTEM_ONLY,
shard: this._shard,
});
};
this._identify = () => this._sessionId ?
this._send(6, {
token: this._auth?.authorization.token,
session_id: this._sessionId,
seq: this._lastSequence,
}) :
this._send(2, {
token: this._auth?.authorization.token,
properties: { $os: 'linux', $browser: 'bot', $device: 'bot' },
intents: this._intents ?? helpers_1.Intents.SYSTEM,
shard: this._shard,
});
this._sendHeartbeat = () => {

@@ -134,3 +115,3 @@ if (this._lastHeartbeatAck) {

else {
this.emit('warn', 'Heartbeat timeout.');
this.emit(ClientEvents.WARN, 'Heartbeat timeout.');
this._wsConnect(true);

@@ -149,8 +130,7 @@ }

this._wsDisconnect(code);
if (code < 4000)
this._wsConnect(true);
else
this.emit('fatal', `Fatal gateway error. Code: ${code}`);
fatalCodes.includes(code) ?
this.emit(ClientEvents.FATAL, `Fatal error. Code: ${code}`) :
this._wsConnect(!dropCodes.includes(code));
};
this._onError = (error) => this.emit('error', error);
this._onError = (error) => this.emit(ClientEvents.ERROR, error);
this.Connect = (authorization, intents, shard) => {

@@ -162,5 +142,3 @@ this._auth = { authorization };

};
this.Disconnect = (code) => {
this._wsDisconnect(code);
};
this.Disconnect = (code) => this._wsDisconnect(code);
this.RequestGuildMembers = (params) => {

@@ -167,0 +145,0 @@ if (!this._ws)

/// <reference types="node" />
import { EventEmitter } from 'events';
import type * as types from './types';
import type * as helpers from './helpers';
import { TargetUserTypes } from './helpers';
export declare enum Events {

@@ -143,3 +143,3 @@ READY = "READY",

target_user?: types.User;
target_user_type?: helpers.TargetUserTypes;
target_user_type?: TargetUserTypes;
temporary: boolean;

@@ -146,0 +146,0 @@ uses: number;

@@ -38,3 +38,3 @@ export declare const HOST: "https://discord.com", API: "https://discord.com/api", API_VERSION = 8, API_PATH: "https://discord.com/api/v8", CDN = "https://cdn.discordapp.com";

export declare enum Intents {
SYSTEM_ONLY = 0,
SYSTEM = 0,
GUILDS = 1,

@@ -314,1 +314,12 @@ GUILD_MEMBERS = 2,

}
export declare enum VoiceEncryptionModes {
XSALSA20_POLY1305 = "xsalsa20_poly1305",
XSALSA20_POLY1305_SUFFIX = "xsalsa20_poly1305_suffix",
XSALSA20_POLY1305_LITE = "xsalsa20_poly1305_lite"
}
export declare enum SpeakingStates {
NONE = 0,
MICROPHONE = 1,
SOUNDSHARE = 2,
PRIORITY = 4
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.MembershipStates = exports.OAuth2GrantTypes = exports.OAuth2Scopes = exports.InteractionResponseFlags = exports.InteractionResponseTypes = exports.InteractionTypes = exports.ApplicationCommandOptionTypes = exports.ActivityFlags = exports.WebhookTypes = exports.VisibilityTypes = exports.PremiumTypes = exports.UserFlags = exports.WidgetStyleOptions = exports.StatusTypes = exports.ActivityTypes = exports.TargetUserTypes = exports.PremiumTier = exports.IntegrationExpireBehaviors = exports.GuildFeatures = exports.SystemChannelFlags = exports.VerificationLevel = exports.MFA_Level = exports.ExplicitContentFilterLevel = exports.DefaultMessageNotificationLevel = exports.AllowedMentionTypes = exports.PermissionsOverwriteTypes = exports.MessageStickerFormatTypes = exports.MessageFlags = exports.MessageActivityTypes = exports.MessageTypes = exports.ChannelTypes = exports.AuditLogEvents = exports.Intents = exports.Permissions = exports.CDN = exports.API_PATH = exports.API_VERSION = exports.API = exports.HOST = void 0;
exports.SpeakingStates = exports.VoiceEncryptionModes = exports.MembershipStates = exports.OAuth2GrantTypes = exports.OAuth2Scopes = exports.InteractionResponseFlags = exports.InteractionResponseTypes = exports.InteractionTypes = exports.ApplicationCommandOptionTypes = exports.ActivityFlags = exports.WebhookTypes = exports.VisibilityTypes = exports.PremiumTypes = exports.UserFlags = exports.WidgetStyleOptions = exports.StatusTypes = exports.ActivityTypes = exports.TargetUserTypes = exports.PremiumTier = exports.IntegrationExpireBehaviors = exports.GuildFeatures = exports.SystemChannelFlags = exports.VerificationLevel = exports.MFA_Level = exports.ExplicitContentFilterLevel = exports.DefaultMessageNotificationLevel = exports.AllowedMentionTypes = exports.PermissionsOverwriteTypes = exports.MessageStickerFormatTypes = exports.MessageFlags = exports.MessageActivityTypes = exports.MessageTypes = exports.ChannelTypes = exports.AuditLogEvents = exports.Intents = exports.Permissions = exports.CDN = exports.API_PATH = exports.API_VERSION = exports.API = exports.HOST = void 0;
exports.HOST = 'https://discord.com', exports.API = `${exports.HOST}/api`, exports.API_VERSION = 8, exports.API_PATH = `${exports.API}/v${exports.API_VERSION}`, exports.CDN = 'https://cdn.discordapp.com';

@@ -42,3 +42,3 @@ exports.Permissions = {

(function (Intents) {
Intents[Intents["SYSTEM_ONLY"] = 0] = "SYSTEM_ONLY";
Intents[Intents["SYSTEM"] = 0] = "SYSTEM";
Intents[Intents["GUILDS"] = 1] = "GUILDS";

@@ -350,1 +350,14 @@ Intents[Intents["GUILD_MEMBERS"] = 2] = "GUILD_MEMBERS";

})(MembershipStates = exports.MembershipStates || (exports.MembershipStates = {}));
var VoiceEncryptionModes;
(function (VoiceEncryptionModes) {
VoiceEncryptionModes["XSALSA20_POLY1305"] = "xsalsa20_poly1305";
VoiceEncryptionModes["XSALSA20_POLY1305_SUFFIX"] = "xsalsa20_poly1305_suffix";
VoiceEncryptionModes["XSALSA20_POLY1305_LITE"] = "xsalsa20_poly1305_lite";
})(VoiceEncryptionModes = exports.VoiceEncryptionModes || (exports.VoiceEncryptionModes = {}));
var SpeakingStates;
(function (SpeakingStates) {
SpeakingStates[SpeakingStates["NONE"] = 0] = "NONE";
SpeakingStates[SpeakingStates["MICROPHONE"] = 1] = "MICROPHONE";
SpeakingStates[SpeakingStates["SOUNDSHARE"] = 2] = "SOUNDSHARE";
SpeakingStates[SpeakingStates["PRIORITY"] = 4] = "PRIORITY";
})(SpeakingStates = exports.SpeakingStates || (exports.SpeakingStates = {}));

@@ -9,1 +9,2 @@ export { Client, ClientEvents } from './client';

export * as Tools from './tools';
export { Voice, VoiceEvents } from './voice';

@@ -22,3 +22,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.Tools = exports.Helpers = exports.Actions = exports.Events = exports.TokenTypes = exports.Authorization = exports.ClientEvents = exports.Client = void 0;
exports.VoiceEvents = exports.Voice = exports.Tools = exports.Helpers = exports.Actions = exports.Events = exports.TokenTypes = exports.Authorization = exports.ClientEvents = exports.Client = void 0;
var client_1 = require("./client");

@@ -35,1 +35,4 @@ Object.defineProperty(exports, "Client", { enumerable: true, get: function () { return client_1.Client; } });

exports.Tools = __importStar(require("./tools"));
var voice_1 = require("./voice");
Object.defineProperty(exports, "Voice", { enumerable: true, get: function () { return voice_1.Voice; } });
Object.defineProperty(exports, "VoiceEvents", { enumerable: true, get: function () { return voice_1.VoiceEvents; } });
import { Permissions as Flags } from './helpers';
import { Guild, User, Application, Team } from './types';
declare type Permission = typeof Flags[keyof typeof Flags];
declare type PermissionSet = string | number | bigint;
export declare const Permissions: {
equals: (a: string | number | bigint, b: string | number | bigint) => boolean;
combine: (permissions: (string | number | bigint)[]) => string;
check: (source: string | number | bigint, permission: Permission) => boolean;
has: (source: string | number | bigint, permission: Permission) => boolean;
add: (source: string | number | bigint, permission: Permission) => string;
remove: (source: string | number | bigint, permission: Permission) => string;
equals: (a: PermissionSet, b: PermissionSet) => boolean;
combine: (permissions: PermissionSet[]) => string;
check: (source: PermissionSet, permission: Permission) => boolean;
has: (source: PermissionSet, permission: Permission) => boolean;
add: (source: PermissionSet, permission: Permission) => string;
remove: (source: PermissionSet, permission: Permission) => string;
};

@@ -12,0 +13,0 @@ export declare const Mentions: {

@@ -5,3 +5,2 @@ "use strict";

const helpers_1 = require("./helpers");
const helpers_2 = require("./helpers");
exports.Permissions = {

@@ -27,26 +26,26 @@ equals: (a, b) => BigInt(a) == BigInt(b),

exports.CdnImages = {
CustomEmoji: (emoji_id, size, ext) => `${helpers_2.CDN}/emojis/${emoji_id}${SizeExtOpt(size, ext)}`,
CustomEmoji: (emoji_id, size, ext) => `${helpers_1.CDN}/emojis/${emoji_id}${SizeExtOpt(size, ext)}`,
GuildIcon: (guild, size, ext) => guild.icon ?
`${helpers_2.CDN}/icons/${guild.id}/${guild.icon}${SizeExtOpt(size, ext)}` :
`${helpers_1.CDN}/icons/${guild.id}/${guild.icon}${SizeExtOpt(size, ext)}` :
null,
GuildSplash: (guild, size, ext) => guild.splash ?
`${helpers_2.CDN}/splashes/${guild.id}/${guild.splash}${SizeExtOpt(size, ext)}` :
`${helpers_1.CDN}/splashes/${guild.id}/${guild.splash}${SizeExtOpt(size, ext)}` :
null,
GuildDiscoverySplash: (guild, size, ext) => guild.discovery_splash ?
`${helpers_2.CDN}/discovery-splashes/${guild.id}/${guild.discovery_splash}${SizeExtOpt(size, ext)}` :
`${helpers_1.CDN}/discovery-splashes/${guild.id}/${guild.discovery_splash}${SizeExtOpt(size, ext)}` :
null,
GuildBanner: (guild, size, ext) => guild.banner ?
`${helpers_2.CDN}/banners/${guild.id}/${guild.banner}${SizeExtOpt(size, ext)}` :
`${helpers_1.CDN}/banners/${guild.id}/${guild.banner}${SizeExtOpt(size, ext)}` :
null,
UserAvatar: (user, size, ext) => user.avatar ?
`${helpers_2.CDN}/avatars/${user.id}/${user.avatar}${SizeExtOpt(size, ext)}` :
`${helpers_2.CDN}/embed/avatars/${Number(user.discriminator) % 5}.png`,
`${helpers_1.CDN}/avatars/${user.id}/${user.avatar}${SizeExtOpt(size, ext)}` :
`${helpers_1.CDN}/embed/avatars/${Number(user.discriminator) % 5}.png`,
ApplicationIcon: (application, size, ext) => application.icon ?
`${helpers_2.CDN}/app-icons/${application.id}/${application.icon}${SizeExtOpt(size, ext)}` :
`${helpers_1.CDN}/app-icons/${application.id}/${application.icon}${SizeExtOpt(size, ext)}` :
null,
ApplicationAsset: (application, asset_id, size, ext) => `${helpers_2.CDN}/app-assets/${application.id}/${asset_id}${SizeExtOpt(size, ext)}`,
AchievementIcon: (application, achievement_id, icon_hash, size, ext) => `${helpers_2.CDN}/app-assets/${application.id}/achievements/${achievement_id}/icons/${icon_hash}${SizeExtOpt(size, ext)}`,
ApplicationAsset: (application, asset_id, size, ext) => `${helpers_1.CDN}/app-assets/${application.id}/${asset_id}${SizeExtOpt(size, ext)}`,
AchievementIcon: (application, achievement_id, icon_hash, size, ext) => `${helpers_1.CDN}/app-assets/${application.id}/achievements/${achievement_id}/icons/${icon_hash}${SizeExtOpt(size, ext)}`,
TeamIcon: (team, size, ext) => team.icon ?
`${helpers_2.CDN}/team-icons/${team.id}/${team.icon}${SizeExtOpt(size, ext)}` :
`${helpers_1.CDN}/team-icons/${team.id}/${team.icon}${SizeExtOpt(size, ext)}` :
null,
};
{
"name": "discord-slim",
"version": "2.0.0-dev.14",
"version": "2.0.0-dev.15",
"description": "Lightweight Discord bot API for Node.js.",

@@ -5,0 +5,0 @@ "author": "Hanabishi",

@@ -20,2 +20,3 @@ # Discord Slim

- Sharding support
- Voice connection support

@@ -38,3 +39,3 @@ ### Support & suggestions server

```js
const { Client, ClientEvents, Authorization, Events, Actions, Helpers } = require('discord-slim');
const { Client, ClientEvents, Authorization, Events, Actions, Helpers, Tools } = require('discord-slim');

@@ -64,5 +65,7 @@ // Basic setup to control client operation.

// Set how many attempts to make due to the rate limit. Default: 5.
// This includes the first try, so values 1 and below will be treated as "no retries".
retryCount: 5,
// Rate limit hit callback
callback: (response, attempts) => console.log(`${response.message} Global: ${response.global}. Cooldown: ${response.retry_after} sec. Attempt: ${attempts}.`),
callback: (response, attempts) =>
console.log(`${response.message} Global: ${response.global}. Cooldown: ${response.retry_after} sec. Attempt: ${attempts}.`),
},

@@ -81,5 +84,7 @@ });

client.events.on(Events.MESSAGE_CREATE, (message) => {
// Filter out own messages
if(message.author.id == client.user.id) return;
// Check that the message contains phrases like "hello bot" or "hi bot"
if(message.content.search(/(^|\s)h(ello|i)(\s|\s.*\s)bot($|\s)/i) < 0) return;
// Using both reply and mention just for demo
Actions.Message.Create(message.channel_id, {

@@ -99,11 +104,6 @@ content: `Hi, ${Tools.Mentions.User(message.author.id)}!`,

client.UpdateStatus({
status: Helpers.StatusTypes.ONLINE,
activities: [{ type: Helpers.ActivityTypes.WATCHING, name: 'YOU' }],
afk: false,
since: 0,
activities: [
{
name: 'YOU',
type: Helpers.ActivityTypes.WATCHING,
}
],
afk: false,
status: Helpers.StatusTypes.ONLINE,
});

@@ -134,3 +134,3 @@ });

client.events.on(Events.INTERACTION_CREATE, (interaction) => {
if(!(interaction.data && interaction.data.name == 'echo')) return;
if(interaction.data?.name != 'echo') return;
Actions.Application.CreateInteractionResponse(interaction.id, interaction.token, {

@@ -137,0 +137,0 @@ type: Helpers.InteractionResponseTypes.CHANNEL_MESSAGE_WITH_SOURCE,

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc