oceanic -> dysnomia

This commit is contained in:
Cynthia Foxwell 2023-05-30 21:03:44 -06:00
parent 95fca1c026
commit 4b91a1e7e9
14 changed files with 169 additions and 222 deletions

View file

@ -8,14 +8,15 @@ A CLI-based client for Discord inspired by [SDF](https://sdf.org)'s [commode](ht
## Usage
1. `pnpm i`
2. `node src/index.js <token>`
Your token will be then stored in `.comcordrc` after the first launch.
### User Accounts
User accounts are *partially* supported via `allowUserAccounts=true` in your `.comcordrc`.
User accounts are _partially_ supported via `allowUserAccounts=true` in your `.comcordrc`.
This is use at your own risk, despite spoofing the official client. I am not responsible for any banned accounts.
#### Guild members not populating
This is due to Oceanic not implementing Lazy Guilds as they are user account specific. **DO NOT bother Oceanic to implement it!** They are purely a bot-focused library.
This is due to most libraries not implementing Lazy Guilds, as bots do not need lazy guilds to function.
If you are willing to implement Lazy Guilds based off of [unofficial documentation](https://luna.gitlab.io/discord-unofficial-docs/lazy_guilds.html)
and my already existing horrible hacks to make user accounts work in the first place, feel free to send a PR (on GitLab, GitHub repo is a read only mirror).
@ -24,9 +25,9 @@ and my already existing horrible hacks to make user accounts work in the first p
You **MUST** grant your bot all Privileged Gateway Intents.
## Design Decisions
* Node.js was chosen currently due to familiarity.
* Oceanic was chosen due to familiarity and the nature of everything not being abstracted out to 200 different classes unlike discord.js.
* "Jank" by design. While I don't expect anyone to actually use comcord on serial terminals or teletypes other than for meme factor, the option is still there.
- Node.js was chosen currently due to familiarity.
- Dysnomia was chosen due to familiarity and the nature of everything not being abstracted out to 200 different classes unlike discord.js.
- "Jank" by design. While I don't expect anyone to actually use comcord on serial terminals or teletypes other than for meme factor, the option is still there.
## TODO
- [x] Commands
@ -70,3 +71,7 @@ You **MUST** grant your bot all Privileged Gateway Intents.
- [ ] Threads
- [x] Not have the token just be in argv
- [x] Not have everything in one file
## Repository
If you're viewing this on GitHub or GitLab, you are viewing a read only mirror.
The main repository is located on [Gitdab](https://gitdab.com/Cynosphere/comcord) and is push mirrored to the other two.

View file

@ -7,8 +7,8 @@
"author": "Cynosphere",
"license": "MIT",
"dependencies": {
"@projectdysnomia/dysnomia": "^0.1.2",
"chalk": "4.1.2",
"discord-rpc": "^4.0.1",
"oceanic.js": "^1.1.2"
"discord-rpc": "^4.0.1"
}
}

View file

@ -1,71 +1,66 @@
lockfileVersion: 5.4
specifiers:
chalk: 4.1.2
discord-rpc: ^4.0.1
oceanic.js: ^1.1.2
lockfileVersion: '6.0'
dependencies:
chalk: 4.1.2
discord-rpc: 4.0.1
oceanic.js: 1.1.2
'@projectdysnomia/dysnomia':
specifier: ^0.1.2
version: 0.1.2
chalk:
specifier: 4.1.2
version: 4.1.2
discord-rpc:
specifier: ^4.0.1
version: 4.0.1
packages:
/@discordjs/voice/0.11.0:
resolution: {integrity: sha512-6+9cj1dxzBJm7WJ9qyG2XZZQ8rcLl6x2caW0C0OxuTtMLAaEDntpb6lqMTFiBg/rDc4Rd59g1w0gJmib33CuHw==}
engines: {node: '>=16.9.0'}
requiresBuild: true
/@projectdysnomia/dysnomia@0.1.2:
resolution: {integrity: sha512-F64G64JwFWn/QUFqkhsyBvXJ0Du3E6Y0yu8tSrcukAnSeW8qV+reKqeQnMmHcQWYopwuYM8Q6OF/VX6VKggtOA==}
engines: {node: '>=10.4.0'}
peerDependencies:
'@discordjs/opus': ^0.9.0
erlpack: github:discord/erlpack || github:abalabahaha/erlpack
eventemitter3: ^5.0.0
pako: ^2.1.0
sodium-native: ^4.0.1
zlib-sync: ^0.1.8
peerDependenciesMeta:
'@discordjs/opus':
optional: true
erlpack:
optional: true
eventemitter3:
optional: true
pako:
optional: true
sodium-native:
optional: true
zlib-sync:
optional: true
dependencies:
'@types/ws': 8.5.3
discord-api-types: 0.36.3
prism-media: 1.3.4
tslib: 2.4.0
ws: 8.9.0
ws: 8.13.0
optionalDependencies:
opusscript: 0.0.8
tweetnacl: 1.0.3
transitivePeerDependencies:
- '@discordjs/opus'
- bufferutil
- ffmpeg-static
- node-opus
- opusscript
- utf-8-validate
dev: false
optional: true
/@types/node/18.8.3:
resolution: {integrity: sha512-0os9vz6BpGwxGe9LOhgP/ncvYN5Tx1fNcd2TM3rD/aCGBkysb+ZWpXEocG24h6ZzOi13+VB8HndAQFezsSOw1w==}
dev: false
optional: true
/@types/ws/8.5.3:
resolution: {integrity: sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==}
dependencies:
'@types/node': 18.8.3
dev: false
optional: true
/ansi-styles/4.3.0:
/ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
dependencies:
color-convert: 2.0.1
dev: false
/bindings/1.5.0:
/bindings@1.5.0:
resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
dependencies:
file-uri-to-path: 1.0.0
dev: false
optional: true
/busboy/1.6.0:
resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
engines: {node: '>=10.16.0'}
dependencies:
streamsearch: 1.1.0
dev: false
/chalk/4.1.2:
/chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
dependencies:
@ -73,23 +68,18 @@ packages:
supports-color: 7.2.0
dev: false
/color-convert/2.0.1:
/color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines: {node: '>=7.0.0'}
dependencies:
color-name: 1.1.4
dev: false
/color-name/1.1.4:
/color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
dev: false
/discord-api-types/0.36.3:
resolution: {integrity: sha512-bz/NDyG0KBo/tY14vSkrwQ/n3HKPf87a0WFW/1M9+tXYK+vp5Z5EksawfCWo2zkAc6o7CClc0eff1Pjrqznlwg==}
dev: false
optional: true
/discord-rpc/4.0.1:
/discord-rpc@4.0.1:
resolution: {integrity: sha512-HOvHpbq5STRZJjQIBzwoKnQ0jHplbEWFWlPDwXXKm/bILh4nzjcg7mNqll0UY7RsjFoaXA7e/oYb/4lvpda2zA==}
dependencies:
node-fetch: 2.6.7
@ -102,22 +92,22 @@ packages:
- utf-8-validate
dev: false
/file-uri-to-path/1.0.0:
/file-uri-to-path@1.0.0:
resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
dev: false
optional: true
/has-flag/4.0.0:
/has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
dev: false
/node-addon-api/1.7.2:
/node-addon-api@1.7.2:
resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==}
dev: false
optional: true
/node-fetch/2.6.7:
/node-fetch@2.6.7:
resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
engines: {node: 4.x || >=6.0.0}
peerDependencies:
@ -129,82 +119,41 @@ packages:
whatwg-url: 5.0.0
dev: false
/oceanic.js/1.1.2:
resolution: {integrity: sha512-aABMK2UERHvyiwjWFx5m5ZZY7oPUHmVSOhICadZh/vqyxvGf48p+aqGlRu9bEtN6XZYPZJecQi/9IPN+phXn1Q==}
engines: {node: '>=16.16.0'}
dependencies:
undici: 5.11.0
ws: 8.9.0
optionalDependencies:
'@discordjs/voice': 0.11.0
transitivePeerDependencies:
- '@discordjs/opus'
- bufferutil
- ffmpeg-static
- node-opus
- opusscript
- utf-8-validate
dev: false
/prism-media/1.3.4:
resolution: {integrity: sha512-eW7LXORkTCQznZs+eqe9VjGOrLBxcBPXgNyHXMTSRVhphvd/RrxgIR7WaWt4fkLuhshcdT5KHL88LAfcvS3f5g==}
peerDependencies:
'@discordjs/opus': ^0.8.0
ffmpeg-static: ^5.0.2 || ^4.2.7 || ^3.0.0 || ^2.4.0
node-opus: ^0.3.3
opusscript: ^0.0.8
peerDependenciesMeta:
'@discordjs/opus':
optional: true
ffmpeg-static:
optional: true
node-opus:
optional: true
opusscript:
optional: true
/opusscript@0.0.8:
resolution: {integrity: sha512-VSTi1aWFuCkRCVq+tx/BQ5q9fMnQ9pVZ3JU4UHKqTkf0ED3fKEPdr+gKAAl3IA2hj9rrP6iyq3hlcJq3HELtNQ==}
requiresBuild: true
dev: false
optional: true
/streamsearch/1.1.0:
resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
engines: {node: '>=10.0.0'}
dev: false
/supports-color/7.2.0:
/supports-color@7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
dependencies:
has-flag: 4.0.0
dev: false
/tr46/0.0.3:
/tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
dev: false
/tslib/2.4.0:
resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==}
/tweetnacl@1.0.3:
resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==}
requiresBuild: true
dev: false
optional: true
/undici/5.11.0:
resolution: {integrity: sha512-oWjWJHzFet0Ow4YZBkyiJwiK5vWqEYoH7BINzJAJOLedZ++JpAlCbUktW2GQ2DS2FpKmxD/JMtWUUWl1BtghGw==}
engines: {node: '>=12.18'}
dependencies:
busboy: 1.6.0
dev: false
/webidl-conversions/3.0.1:
/webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
dev: false
/whatwg-url/5.0.0:
/whatwg-url@5.0.0:
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
dependencies:
tr46: 0.0.3
webidl-conversions: 3.0.1
dev: false
/ws/7.5.9:
/ws@7.5.9:
resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==}
engines: {node: '>=8.3.0'}
peerDependencies:
@ -217,12 +166,12 @@ packages:
optional: true
dev: false
/ws/8.9.0:
resolution: {integrity: sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==}
/ws@8.13.0:
resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==}
engines: {node: '>=10.0.0'}
peerDependencies:
bufferutil: ^4.0.1
utf-8-validate: ^5.0.2
utf-8-validate: '>=5.0.2'
peerDependenciesMeta:
bufferutil:
optional: true

View file

@ -4,13 +4,13 @@ const {updatePresence} = require("../lib/presence");
addCommand("A", "toggles AFK mode", function () {
if (comcord.state.afk == true) {
comcord.state.afk = false;
comcord.client.shards.forEach((shard) => (shard.presence.afk = false));
comcord.client.editStatus("online");
comcord.client.editAFK(false);
console.log("<you have returned>");
} else {
comcord.state.afk = true;
comcord.client.shards.forEach((shard) => (shard.presence.afk = true));
comcord.client.editStatus("idle");
comcord.client.editAFK(true);
console.log("<you go AFK>");
}

View file

@ -13,13 +13,12 @@ addCommand("e", "emote", function () {
} else {
try {
process.stdout.write("\n");
await comcord.client.guilds
.get(comcord.state.currentGuild)
.channels.get(comcord.state.currentChannel)
.createMessage({content: `*${input}*`});
await comcord.client.createMessage(comcord.state.currentChannel, {
content: `*${input}*`,
});
console.log(`<${comcord.client.user.username} ${input}>`);
} catch (err) {
console.log("<failed to send message: " + err.message + ">");
console.log(`<failed to send message: ${err.message}>`);
}
}
});

View file

@ -8,10 +8,10 @@ async function getHistory(limit = 20) {
return;
}
const messages = await comcord.client.guilds
.get(comcord.state.currentGuild)
.channels.get(comcord.state.currentChannel)
.getMessages({limit});
const messages = await comcord.client.getMessages(
comcord.state.currentChannel,
{limit}
);
messages.reverse();
console.log("--Beginning-Review".padEnd(72, "-"));
@ -33,7 +33,7 @@ async function getExtendedHistory(input) {
try {
await getHistory(input);
} catch (err) {
console.log("<failed to get history: " + err.message + ">");
console.log(`<failed to get history: ${err.message}>`);
}
}

View file

@ -8,12 +8,14 @@ function listChannels() {
let longest = 0;
const guild = comcord.client.guilds.get(comcord.state.currentGuild);
const channels = [...guild.channels.values()].filter((c) => c.type == 0);
const channels = Array.from(guild.channels.values()).filter(
(c) => c.type == 0 || c.type == 5
);
channels.sort((a, b) => a.position - b.position);
for (const channel of channels) {
const perms = channel.permissionsOf(comcord.client.user.id);
const private = !perms.has("VIEW_CHANNEL");
const private = !perms.has("readMessageHistory");
if (channel.name.length + (private ? 1 : 0) > longest)
longest = Math.min(25, channel.name.length + (private ? 1 : 0));
@ -26,7 +28,7 @@ function listChannels() {
const topic =
channel.topic != null ? channel.topic.replace(/\n/g, " ") : "";
const perms = channel.permissionsOf(comcord.client.user.id);
const private = !perms.has("VIEW_CHANNEL");
const private = !perms.has("viewChannel");
const name = (private ? "*" : "") + channel.name;

View file

@ -7,7 +7,9 @@ function listGuilds() {
for (const guild of comcord.client.guilds.values()) {
if (guild.name.length > longest) longest = guild.name.length;
const online = [...guild.members.values()].filter((m) => m.presence).length;
const online = Array.from(guild.members.values()).filter(
(m) => m.status
).length;
guilds.push({name: guild.name, members: guild.memberCount, online});
}

View file

@ -39,12 +39,13 @@ function listUsers() {
`\n[you are in '${guild.name}' in '${channel.name}' among ${guild.memberCount}]\n`
);
const online = [...guild.members.values()].filter((m) => m.presence);
online.sort((a, b) => a.tag.localeCompare(b.tag));
const online = Array.from(guild.members.values()).filter((m) => m.status);
online.sort((a, b) => a.username.localeCompare(b.username));
let longest = 0;
for (const member of online) {
const name = member.tag;
// FIXME: remove discrim stuff after username migration finished
const name = member.username;
if (name.length + 3 > longest) longest = name.length + 3;
}
@ -52,8 +53,8 @@ function listUsers() {
let index = 0;
for (const member of online) {
const name = member.tag;
const status = getStatus(member.presence.status);
const name = member.username;
const status = getStatus(member.status);
const nameAndStatus =
(member.user.bot ? chalk.yellow(name) : chalk.reset(name)) + status;

View file

@ -7,14 +7,14 @@ const {listUsers} = require("./listUsers");
function startDM(user) {
startPrompt(":msg> ", async function (input) {
if (input == "") {
console.log(`\n<message not sent to ${user.tag}>`);
console.log(`\n<message not sent to ${user.username}>`);
} else {
try {
const channel = await user.createDM();
const channel = await comcord.client.getDMChannel(user.id);
await channel.createMessage({content: input});
console.log(chalk.bold.green(`\n<message sent to ${user.tag}>`));
console.log(chalk.bold.green(`\n<message sent to ${user.username}>`));
} catch (err) {
console.log("\n<failed to send message: " + err.message + ">");
console.log(`\n<failed to send message: ${err.message}>`);
}
}
});
@ -25,7 +25,7 @@ addCommand("s", "send private", function () {
startPrompt(":to> ", function (who) {
let target;
for (const user of comcord.client.users.values()) {
if (user.tag == who) {
if (user.username == who) {
target = user;
break;
}
@ -42,7 +42,9 @@ addCommand("s", "send private", function () {
addCommand("a", "answer a send", function () {
if (comcord.state.lastDM) {
console.log(chalk.bold.green(`<answering ${comcord.state.lastDM.tag}>`));
console.log(
chalk.bold.green(`<answering ${comcord.state.lastDM.username}>`)
);
startDM(comcord.state.lastDM);
} else {
// FIXME: figure out the actual message in com

View file

@ -21,10 +21,9 @@ function sendMode() {
} else {
try {
process.stdout.write("\n");
await comcord.client.guilds
.get(comcord.state.currentGuild)
.channels.get(comcord.state.currentChannel)
.createMessage({content: input});
await comcord.client.createMessage(comcord.state.currentChannel, {
content: input,
});
if (comcord.state.afk == true) {
comcord.state.afk = false;

View file

@ -1,13 +1,14 @@
const {Client, Constants} = require("oceanic.js");
const {Client, Constants, Channel} = require("@projectdysnomia/dysnomia");
const DiscordRPC = require("discord-rpc");
const chalk = require("chalk");
const fs = require("fs");
const os = require("os");
const rcfile = require("./lib/rcfile");
const config = {};
if (fs.existsSync(rcfile.path)) {
console.log("% Reading " + rcfile.path + " ...");
console.log(`% Reading ${rcfile.path.replace(os.homedir(), "~")} ...`);
rcfile.readFile(config);
}
@ -42,31 +43,19 @@ global.comcord = {
},
commands: {},
};
const client = new Client({
auth:
(config.allowUserAccounts == "true" ? "" : "Bot ") +
(token ?? config.token),
defaultImageFormat: "png",
defaultImageSize: 1024,
gateway: {
intents: ["ALL"],
maxShards: 1,
concurrency: 1,
presence: {
status: "online",
activities: [
{
name: "comcord",
type: 0,
application_id: CLIENT_ID,
timestamps: {
start: comcord.state.startTime,
},
},
],
const client = new Client(
(config.allowUserAccounts == "true" ? "" : "Bot ") + (token ?? config.token),
{
defaultImageFormat: "png",
defaultImageSize: 1024,
gateway: {
intents: Object.values(Constants.Intents),
},
},
});
allowedMentions: {
everyone: false,
},
}
);
comcord.client = client;
const rpc = new DiscordRPC.Client({transport: "ipc"});
comcord.rpc = rpc;
@ -93,7 +82,8 @@ process.stdin.setEncoding("utf8");
client.once("ready", function () {
console.log(
"Logged in as: " + chalk.yellow(`${client.user.tag} (${client.user.id})`)
"Logged in as: " +
chalk.yellow(`${client.user.username} (${client.user.id})`)
);
comcord.state.nameLength = client.user.username.length + 2;
@ -135,6 +125,7 @@ rpc.on("connected", function () {
});
let retryingRPC = false;
rpc.once("ready", function () {
rpc.transport.on("error", function () {});
rpc.transport.on("close", function () {
comcord.state.rpcConnected = false;
if (!retryingRPC) {
@ -158,20 +149,19 @@ rpc.on("error", function () {});
client.on("messageCreate", async function (msg) {
if (msg.author.id === client.user.id) return;
if (msg.channelID && !msg.channel) {
try {
const dmChannel = await msg.author.createDM();
if (dmChannel.id === msg.channelID) {
msg.channel = dmChannel;
}
} catch {
//
}
if (
!(msg.channel instanceof Channel) &&
msg.author.id != client.user.id &&
!msg.guildID
) {
const newChannel = await client.getDMChannel(msg.author.id);
if (msg.channel.id == newChannel.id) msg.channel = newChannel;
}
if (!(msg.channel instanceof Channel)) return;
if (
(msg.channel ? msg.channel.id : msg.channelID) ==
comcord.state.currentChannel ||
msg.channel.id == comcord.state.currentChannel ||
msg.channel?.recipient != null
) {
if (comcord.state.inPrompt) {
@ -188,20 +178,19 @@ client.on("messageCreate", async function (msg) {
client.on("messageUpdate", async function (msg, old) {
if (msg.author.id === client.user.id) return;
if (msg.channelID && !msg.channel) {
try {
const dmChannel = await msg.author.createDM();
if (dmChannel.id === msg.channelID) {
msg.channel = dmChannel;
}
} catch {
//
}
if (
!(msg.channel instanceof Channel) &&
msg.author.id != client.user.id &&
!msg.guildID
) {
const newChannel = await client.getDMChannel(msg.author.id);
if (msg.channel.id == newChannel.id) msg.channel = newChannel;
}
if (!(msg.channel instanceof Channel)) return;
if (
(msg.channel ? msg.channel.id : msg.channelID) ==
comcord.state.currentChannel ||
msg.channel.id == comcord.state.currentChannel ||
msg.channel?.recipient != null
) {
if (old && msg.content == old.content) return;
@ -253,7 +242,10 @@ if (
config.allowUserAccounts == "true" &&
!(token ?? config.token).startsWith("Bot ")
) {
if (fetch == null) {
console.log("User account support pending rewrite.");
process.exit(1);
/*if (fetch == null) {
console.log("Node v18+ needed for user account support.");
process.exit(1);
}
@ -270,14 +262,6 @@ if (
const newConnect = new client.connect.constructor(connectLines.join("\n"));
client.connect = newConnect.bind(client);
// gross hack
global.Constants_1 = Constants;
try {
global.Erlpack = require("erlpack");
} catch {
global.Erlpack = false;
}
console.log("% Injecting headers into request handler");
client.rest.handler.options.userAgent = `Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) discord/${superProperties.client_version} Chrome/91.0.4472.164 Electron/13.6.6 Safari/537.36`;
client.rest.handler._request = client.rest.handler.request.bind(
@ -328,7 +312,7 @@ if (
console.log("% Connecting to gateway now");
await client.connect();
})();
})();*/
} else {
client.connect();
}

View file

@ -155,7 +155,6 @@ function replaceTimestamps(_, time, format = "f") {
function formatMessage({
name,
tag,
content,
bot,
attachments,
@ -252,10 +251,10 @@ function formatMessage({
if (dm) {
if (noColor) {
console.log(`*${tag}* ${content}\x07`);
console.log(`*${name}* ${content}\x07`);
} else {
console.log(
chalk.bold.red(`*${tag}*`) + chalk.reset(" " + content + "\x07")
chalk.bold.red(`*${name}*`) + chalk.reset(" " + content + "\x07")
);
}
} else if (
@ -331,7 +330,6 @@ function processMessage(msg, options = {}) {
if (msg.content.match(REGEX_CODEBLOCK)) {
formatMessage({
name: msg.author.username,
tag: msg.author.tag,
bot: msg.author.bot,
content: msg.content.replace(
REGEX_CODEBLOCK_GLOBAL,
@ -349,7 +347,6 @@ function processMessage(msg, options = {}) {
const line = lines[index];
formatMessage({
name: msg.author.username,
tag: msg.author.tag,
bot: msg.author.bot,
content:
line +
@ -366,7 +363,6 @@ function processMessage(msg, options = {}) {
} else {
formatMessage({
name: msg.author.username,
tag: msg.author.tag,
bot: msg.author.bot,
content: msg.content + (msg.editedTimestamp != null ? " (edited)" : ""),
attachments: msg.attachments,

View file

@ -15,7 +15,7 @@ function updatePresence() {
const activity = {
startTimestamp: comcord.state.startTime,
smallImageKey: `https://cdn.discordapp.com/avatars/${comcord.client.user.id}/${comcord.client.user.avatar}.png?size=1024`,
smallImageText: comcord.client.user.tag,
smallImageText: comcord.client.user.username,
buttons: [
{
label: "comcord Repo",
@ -39,6 +39,17 @@ function updatePresence() {
//
}
}
comcord.client.editStatus(comcord.state.afk ? "idle" : "online", [
{
name: "comcord",
type: 0,
application_id: CLIENT_ID,
timestamps: {
start: comcord.state.startTime,
},
},
]);
} else {
const activity = {
application_id: CLIENT_ID,
@ -65,12 +76,9 @@ function updatePresence() {
activity.state = "AFK";
}
comcord.client.shards.forEach((shard) => {
if (shard.ready) {
shard.presence.activities = [activity];
shard.sendPresenceUpdate();
}
});
comcord.client.editStatus(comcord.state.afk ? "idle" : "online", [
activity,
]);
}
}