rich presence for the hell of it

This commit is contained in:
Cynthia Foxwell 2022-10-02 12:11:08 -06:00
parent 5cf3ef01ef
commit 1eeaec78e3
8 changed files with 150 additions and 1 deletions

View file

@ -8,6 +8,7 @@
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"chalk": "4.1.2", "chalk": "4.1.2",
"discord-rpc": "^4.0.1",
"eris": "github:abalabahaha/eris#dev" "eris": "github:abalabahaha/eris#dev"
} }
} }

View file

@ -2,10 +2,12 @@ lockfileVersion: 5.4
specifiers: specifiers:
chalk: 4.1.2 chalk: 4.1.2
discord-rpc: ^4.0.1
eris: github:abalabahaha/eris#dev eris: github:abalabahaha/eris#dev
dependencies: dependencies:
chalk: 4.1.2 chalk: 4.1.2
discord-rpc: 4.0.1
eris: github.com/abalabahaha/eris/eb403730855714eafa36c541dbe2cb84c9979158 eris: github.com/abalabahaha/eris/eb403730855714eafa36c541dbe2cb84c9979158
packages: packages:
@ -17,6 +19,13 @@ packages:
color-convert: 2.0.1 color-convert: 2.0.1
dev: false dev: false
/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
/chalk/4.1.2: /chalk/4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'} engines: {node: '>=10'}
@ -36,11 +45,46 @@ packages:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
dev: false dev: false
/discord-rpc/4.0.1:
resolution: {integrity: sha512-HOvHpbq5STRZJjQIBzwoKnQ0jHplbEWFWlPDwXXKm/bILh4nzjcg7mNqll0UY7RsjFoaXA7e/oYb/4lvpda2zA==}
dependencies:
node-fetch: 2.6.7
ws: 7.5.9
optionalDependencies:
register-scheme: github.com/devsnek/node-register-scheme/e7cc9a63a1f512565da44cb57316d9fb10750e17
transitivePeerDependencies:
- bufferutil
- encoding
- utf-8-validate
dev: false
/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==} resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'} engines: {node: '>=8'}
dev: false dev: false
/node-addon-api/1.7.2:
resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==}
dev: false
optional: true
/node-fetch/2.6.7:
resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
engines: {node: 4.x || >=6.0.0}
peerDependencies:
encoding: ^0.1.0
peerDependenciesMeta:
encoding:
optional: true
dependencies:
whatwg-url: 5.0.0
dev: false
/opusscript/0.0.8: /opusscript/0.0.8:
resolution: {integrity: sha512-VSTi1aWFuCkRCVq+tx/BQ5q9fMnQ9pVZ3JU4UHKqTkf0ED3fKEPdr+gKAAl3IA2hj9rrP6iyq3hlcJq3HELtNQ==} resolution: {integrity: sha512-VSTi1aWFuCkRCVq+tx/BQ5q9fMnQ9pVZ3JU4UHKqTkf0ED3fKEPdr+gKAAl3IA2hj9rrP6iyq3hlcJq3HELtNQ==}
requiresBuild: true requiresBuild: true
@ -54,12 +98,40 @@ packages:
has-flag: 4.0.0 has-flag: 4.0.0
dev: false dev: false
/tr46/0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
dev: false
/tweetnacl/1.0.3: /tweetnacl/1.0.3:
resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==}
requiresBuild: true requiresBuild: true
dev: false dev: false
optional: true optional: true
/webidl-conversions/3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
dev: false
/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:
resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==}
engines: {node: '>=8.3.0'}
peerDependencies:
bufferutil: ^4.0.1
utf-8-validate: ^5.0.2
peerDependenciesMeta:
bufferutil:
optional: true
utf-8-validate:
optional: true
dev: false
/ws/8.8.1: /ws/8.8.1:
resolution: {integrity: sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==} resolution: {integrity: sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==}
engines: {node: '>=10.0.0'} engines: {node: '>=10.0.0'}
@ -87,3 +159,14 @@ packages:
- bufferutil - bufferutil
- utf-8-validate - utf-8-validate
dev: false dev: false
github.com/devsnek/node-register-scheme/e7cc9a63a1f512565da44cb57316d9fb10750e17:
resolution: {tarball: https://codeload.github.com/devsnek/node-register-scheme/tar.gz/e7cc9a63a1f512565da44cb57316d9fb10750e17}
name: register-scheme
version: 0.0.2
requiresBuild: true
dependencies:
bindings: 1.5.0
node-addon-api: 1.7.2
dev: false
optional: true

View file

@ -1,4 +1,5 @@
const {addCommand} = require("../lib/command"); const {addCommand} = require("../lib/command");
const {updatePresence} = require("../lib/presence");
addCommand("A", "toggles AFK mode", function () { addCommand("A", "toggles AFK mode", function () {
if (comcord.state.afk == true) { if (comcord.state.afk == true) {
@ -12,4 +13,6 @@ addCommand("A", "toggles AFK mode", function () {
comcord.client.editAFK(true); comcord.client.editAFK(true);
console.log("<you go AFK>"); console.log("<you go AFK>");
} }
updatePresence();
}); });

View file

@ -1,6 +1,7 @@
const chalk = require("chalk"); const chalk = require("chalk");
const {startPrompt} = require("../lib/prompt"); const {startPrompt} = require("../lib/prompt");
const {updatePresence} = require("../lib/presence");
function sendMode() { function sendMode() {
if (!comcord.state.currentChannel) { if (!comcord.state.currentChannel) {
@ -30,6 +31,8 @@ function sendMode() {
comcord.client.editStatus("online"); comcord.client.editStatus("online");
comcord.client.editAFK(false); comcord.client.editAFK(false);
console.log("<you have returned>"); console.log("<you have returned>");
updatePresence();
} }
} catch (err) { } catch (err) {
console.log("<failed to send message: " + err.message + ">"); console.log("<failed to send message: " + err.message + ">");

View file

@ -1,5 +1,6 @@
const {addCommand} = require("../lib/command"); const {addCommand} = require("../lib/command");
const {startPrompt} = require("../lib/prompt"); const {startPrompt} = require("../lib/prompt");
const {updatePresence} = require("../lib/presence");
const {listUsers} = require("./listUsers"); const {listUsers} = require("./listUsers");
@ -32,6 +33,8 @@ function switchChannel(input) {
const channel = guild.channels.get(comcord.state.currentChannel); const channel = guild.channels.get(comcord.state.currentChannel);
process.title = `${guild.name} - ${channel.name} - comcord`; process.title = `${guild.name} - ${channel.name} - comcord`;
updatePresence();
} }
} }

View file

@ -1,5 +1,6 @@
const {addCommand} = require("../lib/command"); const {addCommand} = require("../lib/command");
const {startPrompt} = require("../lib/prompt"); const {startPrompt} = require("../lib/prompt");
const {updatePresence} = require("../lib/presence");
const {listChannels} = require("./listChannels"); const {listChannels} = require("./listChannels");
const {listUsers} = require("./listUsers"); const {listUsers} = require("./listUsers");
@ -47,6 +48,8 @@ function switchGuild(input) {
const channel = guild.channels.get(comcord.state.currentChannel); const channel = guild.channels.get(comcord.state.currentChannel);
process.title = `${guild.name} - ${channel.name} - comcord`; process.title = `${guild.name} - ${channel.name} - comcord`;
updatePresence();
} }
} }

View file

@ -1,5 +1,8 @@
const Eris = require("eris"); const Eris = require("eris");
const chalk = require("chalk"); const chalk = require("chalk");
const DiscordRPC = require("discord-rpc");
const CLIENT_ID = "1026163285877325874";
const token = process.argv[2]; const token = process.argv[2];
@ -24,9 +27,12 @@ const client = new Eris("Bot " + token, {
intents: Eris.Constants.Intents.all, intents: Eris.Constants.Intents.all,
}); });
comcord.client = client; comcord.client = client;
const rpc = new DiscordRPC.Client({transport: "ipc"});
comcord.rpc = rpc;
const {finalizePrompt} = require("./lib/prompt"); const {finalizePrompt} = require("./lib/prompt");
const {processMessage, processQueue} = require("./lib/messages"); const {processMessage, processQueue} = require("./lib/messages");
const {updatePresence} = require("./lib/presence");
require("./commands/quit"); require("./commands/quit");
require("./commands/clear"); require("./commands/clear");
@ -56,16 +62,27 @@ client.once("ready", function () {
client.editStatus("online", [ client.editStatus("online", [
{ {
application_id: "1026163285877325874", application_id: CLIENT_ID,
name: "comcord", name: "comcord",
timestamps: { timestamps: {
start: comcord.state.startTime, start: comcord.state.startTime,
}, },
}, },
]); ]);
rpc
.login({
clientId: CLIENT_ID,
})
.catch(function () {});
}); });
client.on("error", function () {}); client.on("error", function () {});
rpc.on("ready", function () {
updatePresence();
});
rpc.on("error", function () {});
client.on("messageCreate", function (msg) { client.on("messageCreate", function (msg) {
if (msg.author.id === client.user.id) return; if (msg.author.id === client.user.id) return;

36
src/lib/presence.js Normal file
View file

@ -0,0 +1,36 @@
function updatePresence() {
let guild, channel;
if (comcord.state.currentGuild != null) {
guild = comcord.client.guilds.get(comcord.state.currentGuild);
}
if (comcord.state.currentChannel != null && guild != null) {
channel = guild.channels.get(comcord.state.currentChannel);
}
try {
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.username}#${comcord.client.user.discriminator}`,
buttons: [
{label: "comcord Repo", url: "https://github.com/Cynosphere/comcord"},
],
};
if (guild != null) {
activity.largeImageKey = `https://cdn.discordapp.com/icons/${guild.id}/${guild.icon}.png?size=1024`;
activity.largeImageText = guild.name;
if (channel != null) {
activity.details = `#${channel.name} - ${guild.name}`;
}
}
if (comcord.state.afk == true) {
activity.state = "AFK";
}
comcord.rpc.setActivity(activity);
} catch (err) {
//
}
}
module.exports = {updatePresence};