n8n-nodes-discord-self
Version:
n8n community nodes for Discord selfbot via discord.js-selfbot-v13 (use at your own risk)
116 lines • 6.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DiscordSelfTrigger = void 0;
const ClientManager_1 = require("./ClientManager");
class DiscordSelfTrigger {
constructor() {
this.description = {
displayName: 'Discord Self Trigger',
name: 'discordSelfTrigger',
group: ['trigger'],
version: 1,
description: '触发来自 Discord 自用号的事件(最小实现:messageCreate)',
defaults: {
name: 'Discord Self Trigger',
},
inputs: [],
outputs: ["main"],
credentials: [
{
name: 'discordSelfApi',
required: true,
},
],
properties: [
{
displayName: 'Event',
name: 'event',
type: 'options',
default: 'messageCreate',
options: [{ name: 'Message Created', value: 'messageCreate' }],
},
{
displayName: 'Channel IDs',
name: 'channelIds',
type: 'string',
default: '',
description: '可选,逗号分隔的频道ID列表。为空表示全部频道',
},
{
displayName: 'Only DMs',
name: 'onlyDMs',
type: 'boolean',
default: false,
description: 'Whether to listen to direct messages only',
},
{
displayName: 'Only Mentions Me',
name: 'onlyMentions',
type: 'boolean',
default: false,
description: 'Whether to trigger only when the authenticated user is mentioned',
},
{
displayName: 'Ignore Self Messages',
name: 'ignoreSelf',
type: 'boolean',
default: true,
description: 'Whether to ignore messages sent by the authenticated user',
},
],
};
}
async trigger() {
var _a;
const credentials = (await this.getCredentials('discordSelfApi'));
const token = credentials.token;
const channelIdsRaw = this.getNodeParameter('channelIds', 0) || '';
const onlyDMs = this.getNodeParameter('onlyDMs', 0) || false;
const onlyMentions = this.getNodeParameter('onlyMentions', 0) || false;
const ignoreSelf = (_a = this.getNodeParameter('ignoreSelf', 0)) !== null && _a !== void 0 ? _a : true;
const client = await (0, ClientManager_1.getOrCreateClient)(token);
const handler = (message) => {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
try {
if (onlyDMs && (message === null || message === void 0 ? void 0 : message.guild))
return;
if (ignoreSelf && ((_a = message === null || message === void 0 ? void 0 : message.author) === null || _a === void 0 ? void 0 : _a.id) && ((_b = client.user) === null || _b === void 0 ? void 0 : _b.id) && message.author.id === client.user.id)
return;
if (channelIdsRaw) {
const allowIds = channelIdsRaw
.split(',')
.map((s) => s.trim())
.filter((s) => s.length > 0);
if (allowIds.length > 0 && !allowIds.includes((_c = message === null || message === void 0 ? void 0 : message.channel) === null || _c === void 0 ? void 0 : _c.id))
return;
}
if (onlyMentions && ((_d = client.user) === null || _d === void 0 ? void 0 : _d.id)) {
const mentioned = Boolean((_g = (_f = (_e = message === null || message === void 0 ? void 0 : message.mentions) === null || _e === void 0 ? void 0 : _e.users) === null || _f === void 0 ? void 0 : _f.has) === null || _g === void 0 ? void 0 : _g.call(_f, client.user.id));
if (!mentioned)
return;
}
const data = {
id: message === null || message === void 0 ? void 0 : message.id,
content: (_h = message === null || message === void 0 ? void 0 : message.content) !== null && _h !== void 0 ? _h : '',
authorId: (_k = (_j = message === null || message === void 0 ? void 0 : message.author) === null || _j === void 0 ? void 0 : _j.id) !== null && _k !== void 0 ? _k : null,
authorUsername: (_m = (_l = message === null || message === void 0 ? void 0 : message.author) === null || _l === void 0 ? void 0 : _l.username) !== null && _m !== void 0 ? _m : null,
channelId: (_p = (_o = message === null || message === void 0 ? void 0 : message.channel) === null || _o === void 0 ? void 0 : _o.id) !== null && _p !== void 0 ? _p : null,
guildId: (_r = (_q = message === null || message === void 0 ? void 0 : message.guild) === null || _q === void 0 ? void 0 : _q.id) !== null && _r !== void 0 ? _r : null,
createdTimestamp: (_s = message === null || message === void 0 ? void 0 : message.createdTimestamp) !== null && _s !== void 0 ? _s : null,
};
const items = this.helpers.returnJsonArray([data]);
this.emit([items]);
}
catch (e) {
}
};
client.on('messageCreate', handler);
return {
closeFunction: async () => {
client.off('messageCreate', handler);
},
};
}
}
exports.DiscordSelfTrigger = DiscordSelfTrigger;
//# sourceMappingURL=DiscordSelfTrigger.node.js.map