mirror of
https://github.com/Expand-sys/chatapp
synced 2026-03-22 12:27:10 +11:00
80 lines
2.2 KiB
JavaScript
80 lines
2.2 KiB
JavaScript
const express = require("express");
|
|
const app = express();
|
|
|
|
const http = require("http");
|
|
const server = http.createServer(app);
|
|
const io = require("socket.io")(server, {
|
|
cors: {
|
|
origin: "https://example.com",
|
|
methods: ["GET", "POST"],
|
|
},
|
|
});
|
|
const { Client, Intents, Collection, ThreadManager } = require("discord.js");
|
|
const dotenv = require("dotenv");
|
|
const uuid = require("uuid");
|
|
const port = process.env.PORT || 40091;
|
|
const fs = require("fs");
|
|
|
|
dotenv.config();
|
|
const client = new Client({
|
|
intents: [
|
|
Intents.FLAGS.GUILDS,
|
|
Intents.FLAGS.GUILD_MESSAGES,
|
|
Intents.FLAGS.GUILD_MEMBERS,
|
|
Intents.FLAGS.GUILD_PRESENCES,
|
|
],
|
|
});
|
|
|
|
let channel;
|
|
let guild;
|
|
|
|
async function createThread(client, socket) {
|
|
let channel = await client.channels.fetch(process.env.THREADCHANNEL);
|
|
if (channel != null) {
|
|
let thread = await channel.threads.create({
|
|
name: socket.id,
|
|
autoArchiveDuration: 60,
|
|
});
|
|
const filter = (m) => m.content.includes("!reply");
|
|
const collector = await thread.createMessageCollector();
|
|
return { thread: thread, collector: collector };
|
|
}
|
|
}
|
|
|
|
client.once("ready", async () => {
|
|
console.log("Ready!");
|
|
io.on("connection", async (socket) => {
|
|
console.log(socket.id);
|
|
let package = await createThread(client, socket);
|
|
await socket.on("chat message", async function (msg) {
|
|
let modRole = await package.thread.guild.roles.resolve(
|
|
process.env.MODROLE,
|
|
true
|
|
);
|
|
let mod = await modRole.members.random();
|
|
console.log(mod.presence.status);
|
|
if (mod.presence.status != "online") {
|
|
io.to(socket.id).emit("reply", "Service personel not currently online");
|
|
} else {
|
|
package.thread.members.add(mod);
|
|
package.thread.send(msg);
|
|
}
|
|
});
|
|
socket.on("disconnect", async (reason) => {
|
|
console.log(package.thread.messageCount);
|
|
if (package.thread.messageCount == 0) {
|
|
package.thread.delete();
|
|
}
|
|
});
|
|
await package.collector.on("collect", async (m) => {
|
|
if (m.author.bot) return;
|
|
io.to(socket.id).emit("reply", m.content);
|
|
});
|
|
});
|
|
});
|
|
|
|
server.listen(port, () => {
|
|
console.log(`Socket.IO server running at http://localhost:${port}/`);
|
|
});
|
|
|
|
client.login(process.env.TOKEN);
|