forked from keinBot/cuffeo
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 303baa25ad |
120
src/clients/discord.mjs
Normal file
120
src/clients/discord.mjs
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
import { Client, GatewayIntentBits, Partials } from "discord.js";
|
||||||
|
import EventEmitter from "events";
|
||||||
|
|
||||||
|
export default class discord extends EventEmitter {
|
||||||
|
constructor(options) {
|
||||||
|
super();
|
||||||
|
this.options = options || {};
|
||||||
|
this.token = options.token || null;
|
||||||
|
this.set = this.options.set || "all";
|
||||||
|
this.network = "discord";
|
||||||
|
|
||||||
|
this.bot = new Client({
|
||||||
|
intents: [
|
||||||
|
GatewayIntentBits.Guilds,
|
||||||
|
GatewayIntentBits.GuildMessages,
|
||||||
|
GatewayIntentBits.MessageContent,
|
||||||
|
GatewayIntentBits.DirectMessages,
|
||||||
|
GatewayIntentBits.GuildMessageReactions
|
||||||
|
],
|
||||||
|
partials: [Partials.Channel]
|
||||||
|
});
|
||||||
|
|
||||||
|
this.bot.login(this.token);
|
||||||
|
|
||||||
|
this.server = {
|
||||||
|
set: this.set,
|
||||||
|
channel: new Map(),
|
||||||
|
user: new Map(),
|
||||||
|
me: {}
|
||||||
|
};
|
||||||
|
|
||||||
|
this.bot.on("clientReady", () => {
|
||||||
|
this.server.me = {
|
||||||
|
nickname: this.bot.user.username,
|
||||||
|
username: this.bot.user.username,
|
||||||
|
account: this.bot.user.id.toString(),
|
||||||
|
prefix: `${this.bot.user.username}!${this.bot.user.id.toString()}`,
|
||||||
|
id: this.bot.user.id.toString()
|
||||||
|
};
|
||||||
|
this.emit("data", ["ready", "discord"]);
|
||||||
|
});
|
||||||
|
|
||||||
|
this.bot.on("messageCreate", msg => {
|
||||||
|
// Ignore messages from self
|
||||||
|
if (msg.author.id === this.bot.user.id) return;
|
||||||
|
|
||||||
|
console.log(`[DISCORD DEBUG] Received message: '${msg.content}' from ${msg.author.username} in ${msg.channel.name || 'DM'}`);
|
||||||
|
|
||||||
|
const replyObj = this.reply(msg);
|
||||||
|
console.log(`[DISCORD DEBUG] Emitting data event for message:`, replyObj.message);
|
||||||
|
this.emit("data", ["message", replyObj]);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Optional: Log errors to avoid crashing
|
||||||
|
this.bot.on("error", console.error);
|
||||||
|
}
|
||||||
|
|
||||||
|
reply(tmp) {
|
||||||
|
return {
|
||||||
|
type: "discord",
|
||||||
|
network: "Discord",
|
||||||
|
channel: tmp.channel.name || 'DM',
|
||||||
|
channelid: tmp.channel.id,
|
||||||
|
user: {
|
||||||
|
prefix: `${tmp.author.username}!${tmp.author.id}`,
|
||||||
|
nick: tmp.author.username,
|
||||||
|
username: tmp.author.username,
|
||||||
|
account: tmp.author.id.toString()
|
||||||
|
},
|
||||||
|
message: tmp.content,
|
||||||
|
media: tmp.attachments.find(a =>
|
||||||
|
a.contentType?.startsWith('video/mp4') ||
|
||||||
|
a.contentType?.startsWith('video/webm')
|
||||||
|
)?.url,
|
||||||
|
time: ~~(Date.now() / 1000),
|
||||||
|
raw: tmp,
|
||||||
|
self: this.server,
|
||||||
|
reply: msg => { return this.send(tmp, this.format(msg)); },
|
||||||
|
replyAction: msg => this.send(tmp, this.format(`*${msg}*`), "normal"),
|
||||||
|
replyNotice: msg => this.send(tmp, this.format(msg))
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async send(r, msg, mode = "blah") {
|
||||||
|
try {
|
||||||
|
switch (mode) {
|
||||||
|
case "normal":
|
||||||
|
return await r.channel.send(msg);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return await r.reply(msg);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error("Failed to send message:", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async sendmsg(mode, recipient, msg) {
|
||||||
|
try {
|
||||||
|
const channel = this.bot.channels.cache.get(recipient) || await this.bot.channels.fetch(recipient).catch(() => null);
|
||||||
|
if (channel) {
|
||||||
|
await channel.send(msg);
|
||||||
|
} else {
|
||||||
|
console.error(`Channel ${recipient} not found or not cached`);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error("Failed to sendmsg:", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
format(msg) {
|
||||||
|
if (typeof msg === 'object') return msg;
|
||||||
|
return msg.toString()
|
||||||
|
.replace(/\[b\](.*?)\[\/b\]/g, "**$1**") // bold
|
||||||
|
.replace(/\[i\](.*?)\[\/i\]/g, "*$1*") // italic
|
||||||
|
.replace(/\[color=(.*?)](.*?)\[\/color\]/g, "$2")
|
||||||
|
;
|
||||||
|
}
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user