n8n-nodes-discord-dnd 0.1.74 → 0.1.75
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
|
|
1
|
-
import { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from
|
1
|
+
import { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from "n8n-workflow";
|
2
2
|
export declare class DiscordAction implements INodeType {
|
3
3
|
description: INodeTypeDescription;
|
4
4
|
execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
|
@@ -4,103 +4,116 @@ exports.DiscordAction = void 0;
|
|
4
4
|
const discord_js_1 = require("discord.js");
|
5
5
|
const voice_1 = require("@discordjs/voice");
|
6
6
|
const client_1 = require("./client");
|
7
|
-
const DiscordIntentMapping_1 = require("../definitions/DiscordIntentMapping");
|
8
7
|
class DiscordAction {
|
9
8
|
constructor() {
|
10
9
|
this.description = {
|
11
|
-
displayName:
|
12
|
-
name:
|
13
|
-
icon:
|
14
|
-
group: [
|
10
|
+
displayName: "Discord Action",
|
11
|
+
name: "discordAction",
|
12
|
+
icon: "file:../assets/icon/discord.svg",
|
13
|
+
group: ["output"],
|
15
14
|
version: 1,
|
16
|
-
description:
|
15
|
+
description: "Perform Discord voice channel operations",
|
17
16
|
defaults: {
|
18
|
-
name:
|
17
|
+
name: "Discord Action",
|
19
18
|
},
|
20
|
-
inputs: [
|
21
|
-
outputs: [
|
19
|
+
inputs: ["main"],
|
20
|
+
outputs: ["main"],
|
22
21
|
credentials: [
|
23
22
|
{
|
24
|
-
name:
|
23
|
+
name: "discordApi",
|
25
24
|
required: true,
|
26
25
|
},
|
27
26
|
],
|
28
27
|
properties: [
|
29
28
|
{
|
30
|
-
displayName:
|
31
|
-
name:
|
32
|
-
type:
|
29
|
+
displayName: "Operation",
|
30
|
+
name: "operation",
|
31
|
+
type: "options",
|
33
32
|
options: [
|
34
33
|
{
|
35
|
-
name:
|
36
|
-
value:
|
37
|
-
description:
|
34
|
+
name: "Join Voice Channel",
|
35
|
+
value: "joinVoiceChannel",
|
36
|
+
description: "Join a voice channel",
|
38
37
|
},
|
39
38
|
{
|
40
|
-
name:
|
41
|
-
value:
|
42
|
-
description:
|
39
|
+
name: "Leave Voice Channel",
|
40
|
+
value: "leaveVoiceChannel",
|
41
|
+
description: "Leave the current voice channel",
|
43
42
|
},
|
44
43
|
],
|
45
|
-
default:
|
44
|
+
default: "joinVoiceChannel",
|
46
45
|
required: true,
|
47
46
|
},
|
48
47
|
{
|
49
|
-
displayName:
|
50
|
-
name:
|
51
|
-
type:
|
52
|
-
default:
|
48
|
+
displayName: "Guild ID",
|
49
|
+
name: "guildId",
|
50
|
+
type: "string",
|
51
|
+
default: "",
|
53
52
|
required: true,
|
54
|
-
description:
|
53
|
+
description: "The ID of the Discord server (guild)",
|
55
54
|
},
|
56
55
|
{
|
57
|
-
displayName:
|
58
|
-
name:
|
59
|
-
type:
|
60
|
-
default:
|
56
|
+
displayName: "Channel ID",
|
57
|
+
name: "channelId",
|
58
|
+
type: "string",
|
59
|
+
default: "",
|
61
60
|
displayOptions: {
|
62
61
|
show: {
|
63
|
-
operation: [
|
62
|
+
operation: ["joinVoiceChannel"],
|
64
63
|
},
|
65
64
|
},
|
66
65
|
required: true,
|
67
|
-
description:
|
66
|
+
description: "The ID of the voice channel to join",
|
68
67
|
},
|
69
68
|
],
|
70
69
|
};
|
71
70
|
}
|
72
71
|
async execute() {
|
73
|
-
const credentials = await this.getCredentials(
|
74
|
-
const operation = this.getNodeParameter(
|
75
|
-
const guildId = this.getNodeParameter(
|
72
|
+
const credentials = await this.getCredentials("discordApi");
|
73
|
+
const operation = this.getNodeParameter("operation", 0);
|
74
|
+
const guildId = this.getNodeParameter("guildId", 0);
|
75
|
+
const channelId = this.getNodeParameter("channelId", 0);
|
76
76
|
// Initialize Discord client with voice intents
|
77
|
-
const clientOptions =
|
77
|
+
const clientOptions = {
|
78
|
+
intents: [
|
79
|
+
discord_js_1.GatewayIntentBits.Guilds,
|
80
|
+
discord_js_1.GatewayIntentBits.GuildMessages,
|
81
|
+
discord_js_1.GatewayIntentBits.MessageContent,
|
82
|
+
discord_js_1.GatewayIntentBits.DirectMessages,
|
83
|
+
discord_js_1.GatewayIntentBits.GuildVoiceStates,
|
84
|
+
],
|
85
|
+
partials: [discord_js_1.Partials.Channel],
|
86
|
+
};
|
78
87
|
const client = await (0, client_1.initializeDiscordClient)(credentials.botToken, clientOptions);
|
79
88
|
try {
|
80
89
|
const guild = await client.guilds.fetch(guildId);
|
81
90
|
if (!guild) {
|
82
91
|
throw new Error(`Could not find guild with ID ${guildId}`);
|
83
92
|
}
|
93
|
+
const voiceChannel = (await guild.channels.fetch(channelId));
|
94
|
+
if (!voiceChannel || voiceChannel.type !== 2) {
|
95
|
+
// 2 = GUILD_VOICE
|
96
|
+
throw new Error("Channel is not a voice channel!");
|
97
|
+
}
|
84
98
|
switch (operation) {
|
85
|
-
case
|
86
|
-
|
87
|
-
const channel = await guild.channels.fetch(channelId);
|
88
|
-
if (!channel || !(channel instanceof discord_js_1.VoiceChannel)) {
|
99
|
+
case "joinVoiceChannel": {
|
100
|
+
if (!voiceChannel || !(voiceChannel instanceof discord_js_1.VoiceChannel)) {
|
89
101
|
throw new Error(`Channel ${channelId} is not a voice channel`);
|
90
102
|
}
|
91
103
|
// Check bot permissions
|
92
|
-
const permissions =
|
104
|
+
const permissions = voiceChannel.permissionsFor(client.user);
|
93
105
|
if (!(permissions === null || permissions === void 0 ? void 0 : permissions.has(discord_js_1.PermissionsBitField.Flags.Connect))) {
|
94
|
-
throw new Error(
|
106
|
+
throw new Error("Bot does not have permission to join this voice channel");
|
95
107
|
}
|
96
108
|
if (!(permissions === null || permissions === void 0 ? void 0 : permissions.has(discord_js_1.PermissionsBitField.Flags.Speak))) {
|
97
|
-
throw new Error(
|
109
|
+
throw new Error("Bot does not have permission to speak in this voice channel");
|
98
110
|
}
|
99
111
|
// Create connection
|
100
112
|
const connection = (0, voice_1.joinVoiceChannel)({
|
101
|
-
channelId
|
102
|
-
guildId
|
103
|
-
adapterCreator: guild
|
113
|
+
channelId,
|
114
|
+
guildId,
|
115
|
+
adapterCreator: voiceChannel.guild
|
116
|
+
.voiceAdapterCreator,
|
104
117
|
selfDeaf: false,
|
105
118
|
selfMute: false,
|
106
119
|
});
|
@@ -113,9 +126,9 @@ class DiscordAction {
|
|
113
126
|
(0, voice_1.entersState)(connection, voice_1.VoiceConnectionStatus.Ready, 30000),
|
114
127
|
new Promise((_, reject) => {
|
115
128
|
connection.on(voice_1.VoiceConnectionStatus.Disconnected, () => {
|
116
|
-
reject(new Error(
|
129
|
+
reject(new Error("Voice connection was disconnected"));
|
117
130
|
});
|
118
|
-
connection.on(
|
131
|
+
connection.on("error", (error) => {
|
119
132
|
reject(error);
|
120
133
|
});
|
121
134
|
}),
|
@@ -124,11 +137,11 @@ class DiscordAction {
|
|
124
137
|
catch (error) {
|
125
138
|
// Clean up if connection fails
|
126
139
|
connection.destroy();
|
127
|
-
throw new Error(`Failed to join voice channel: ${(error === null || error === void 0 ? void 0 : error.message) ||
|
140
|
+
throw new Error(`Failed to join voice channel: ${(error === null || error === void 0 ? void 0 : error.message) || "Unknown error"}`);
|
128
141
|
}
|
129
142
|
break;
|
130
143
|
}
|
131
|
-
case
|
144
|
+
case "leaveVoiceChannel": {
|
132
145
|
const connection = (0, voice_1.getVoiceConnection)(guildId);
|
133
146
|
if (connection) {
|
134
147
|
connection.destroy();
|
@@ -141,12 +154,16 @@ class DiscordAction {
|
|
141
154
|
// Clean up: Destroy the client after operation is complete
|
142
155
|
client.destroy();
|
143
156
|
// Return success with additional details
|
144
|
-
return [
|
157
|
+
return [
|
158
|
+
this.helpers.returnJsonArray({
|
145
159
|
success: true,
|
146
160
|
operation,
|
147
161
|
guildId,
|
148
|
-
channelId: operation ===
|
149
|
-
|
162
|
+
channelId: operation === "joinVoiceChannel"
|
163
|
+
? this.getNodeParameter("channelId", 0)
|
164
|
+
: undefined,
|
165
|
+
}),
|
166
|
+
];
|
150
167
|
}
|
151
168
|
catch (error) {
|
152
169
|
// Clean up on error
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"DiscordAction.node.js","sourceRoot":"","sources":["../../src/nodes/DiscordAction.node.ts"],"names":[],"mappings":";;;AAMA,
|
1
|
+
{"version":3,"file":"DiscordAction.node.js","sourceRoot":"","sources":["../../src/nodes/DiscordAction.node.ts"],"names":[],"mappings":"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"}
|