Permissions & branch commands, git branch function, prefix QoL
This commit is contained in:
parent
d3499d2bbd
commit
c61c3daa2c
|
@ -1,5 +1,5 @@
|
||||||
desiredUser:
|
desiredUser:
|
||||||
name: "🟇 𝙎𝙪𝙥𝙚𝙧 Cosmic (*help)"
|
name: "🟇 𝙎𝙪𝙥𝙚𝙧 Cosmic"
|
||||||
color: "#1d0054"
|
color: "#1d0054"
|
||||||
agents:
|
agents:
|
||||||
wss://mppclone.com:
|
wss://mppclone.com:
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
prefixes:
|
prefixes:
|
||||||
- id: cosmic
|
- id: "**"
|
||||||
spaced: true
|
|
||||||
- id: "*"
|
|
||||||
spaced: false
|
spaced: false
|
||||||
|
- id: cdebug
|
||||||
|
spaced: true
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { Inventory, Role, User } from "@prisma/client";
|
import { Inventory, Role, User } from "@prisma/client";
|
||||||
import { createUser, readUser } from "../data/user";
|
import { createUser, readUser, updateUser } from "../data/user";
|
||||||
import { ServiceAgent } from "../services/ServiceAgent";
|
import { ServiceAgent } from "../services/ServiceAgent";
|
||||||
import { Command } from "./Command";
|
import { Command } from "./Command";
|
||||||
import { CommandGroup } from "./CommandGroup";
|
import { CommandGroup } from "./CommandGroup";
|
||||||
|
@ -12,13 +12,13 @@ import { loadConfig } from "../util/config";
|
||||||
|
|
||||||
const prefixConfig = loadConfig("config/prefixes.yml", {
|
const prefixConfig = loadConfig("config/prefixes.yml", {
|
||||||
prefixes: [
|
prefixes: [
|
||||||
{
|
|
||||||
id: "cosmic",
|
|
||||||
spaced: true
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
id: "*",
|
id: "*",
|
||||||
spaced: false
|
spaced: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "cosmic",
|
||||||
|
spaced: true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
@ -77,6 +77,11 @@ export class CommandHandler {
|
||||||
return "Somehow, something has gone terribly wrong and I can't create user data for you. I can't run your command now.";
|
return "Somehow, something has gone terribly wrong and I can't create user data for you. I can't run your command now.";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (user.name !== msg.p.name) {
|
||||||
|
user.name = msg.p.name;
|
||||||
|
await updateUser(user);
|
||||||
|
}
|
||||||
|
|
||||||
// Get inventory data
|
// Get inventory data
|
||||||
let inventory = await readInventory(msg.p._id);
|
let inventory = await readInventory(msg.p._id);
|
||||||
|
|
||||||
|
@ -93,12 +98,15 @@ export class CommandHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
let usedPrefix: Prefix | undefined;
|
let usedPrefix: Prefix | undefined;
|
||||||
|
let isSpacedAndNonMatching = false;
|
||||||
|
|
||||||
for (const prefix of this.prefixes) {
|
for (const prefix of this.prefixes) {
|
||||||
if (msg.argv[0].startsWith(prefix.id)) {
|
if (msg.argv[0].startsWith(prefix.id)) {
|
||||||
usedPrefix = prefix;
|
usedPrefix = prefix;
|
||||||
|
|
||||||
if (prefix.spaced) {
|
if (prefix.spaced) {
|
||||||
|
if (prefix.id !== msg.argv[0])
|
||||||
|
isSpacedAndNonMatching = true;
|
||||||
msg.argv.splice(0, 1);
|
msg.argv.splice(0, 1);
|
||||||
msg.argc--;
|
msg.argc--;
|
||||||
}
|
}
|
||||||
|
@ -108,6 +116,7 @@ export class CommandHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!usedPrefix) return;
|
if (!usedPrefix) return;
|
||||||
|
if (isSpacedAndNonMatching) return;
|
||||||
|
|
||||||
let usedAlias = msg.argv[0];
|
let usedAlias = msg.argv[0];
|
||||||
if (!usedPrefix.spaced)
|
if (!usedPrefix.spaced)
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
import { getGitBranch } from "../../../util/git";
|
||||||
|
import { Command } from "../../Command";
|
||||||
|
|
||||||
|
export const branch = new Command(
|
||||||
|
"branch",
|
||||||
|
["branch"],
|
||||||
|
"get the git branch bozo",
|
||||||
|
"branch",
|
||||||
|
async (msg, agent) => {
|
||||||
|
return `Current git branch: \`${await getGitBranch()}\``;
|
||||||
|
}
|
||||||
|
);
|
|
@ -0,0 +1,28 @@
|
||||||
|
import {
|
||||||
|
TRole,
|
||||||
|
fuzzyFindRoleByDisplayName,
|
||||||
|
getRole
|
||||||
|
} from "../../../permissions";
|
||||||
|
import { Command } from "../../Command";
|
||||||
|
|
||||||
|
export const permissions = new Command(
|
||||||
|
"permissions",
|
||||||
|
["permissions", "perms", "perm"],
|
||||||
|
"list permissions of a role bozo",
|
||||||
|
"permissions [role]",
|
||||||
|
(msg, agent) => {
|
||||||
|
const userRole = getRole(msg.user.role);
|
||||||
|
let role: TRole | undefined;
|
||||||
|
|
||||||
|
if (userRole) role = userRole;
|
||||||
|
if (msg.argv[1]) role = fuzzyFindRoleByDisplayName(msg.argv[1]);
|
||||||
|
|
||||||
|
if (role) {
|
||||||
|
return `Permissions for role "${
|
||||||
|
role.displayName
|
||||||
|
}": ${role.permissions.join(" | ")}`;
|
||||||
|
} else {
|
||||||
|
return `No role found.`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
|
@ -14,6 +14,8 @@ import { role } from "./commands/utility/role";
|
||||||
import { ic } from "./commands/utility/ic";
|
import { ic } from "./commands/utility/ic";
|
||||||
import { uptime } from "./commands/utility/uptime";
|
import { uptime } from "./commands/utility/uptime";
|
||||||
import { balance } from "./commands/economy/balance";
|
import { balance } from "./commands/economy/balance";
|
||||||
|
import { permissions } from "./commands/utility/permissions";
|
||||||
|
import { branch } from "./commands/utility/branch";
|
||||||
|
|
||||||
export function loadCommands() {
|
export function loadCommands() {
|
||||||
// cringe
|
// cringe
|
||||||
|
@ -39,7 +41,9 @@ export function loadCommands() {
|
||||||
color,
|
color,
|
||||||
role,
|
role,
|
||||||
ic,
|
ic,
|
||||||
uptime
|
uptime,
|
||||||
|
permissions,
|
||||||
|
branch
|
||||||
]);
|
]);
|
||||||
CommandHandler.addCommandGroup(utility);
|
CommandHandler.addCommandGroup(utility);
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,3 +88,10 @@ export function loadRoleConfig() {
|
||||||
export function getRole(role: Role) {
|
export function getRole(role: Role) {
|
||||||
return roles.get(role);
|
return roles.get(role);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function fuzzyFindRoleByDisplayName(fuzzy: string) {
|
||||||
|
for (const [key, val] of roles) {
|
||||||
|
if (val.displayName.toLowerCase().includes(fuzzy.toLowerCase()))
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ interface MPPNetConfig {
|
||||||
|
|
||||||
const mppConfig = loadConfig<MPPNetConfig>("config/mpp_net_channels.yml", {
|
const mppConfig = loadConfig<MPPNetConfig>("config/mpp_net_channels.yml", {
|
||||||
desiredUser: {
|
desiredUser: {
|
||||||
name: "🟇 𝙎𝙪𝙥𝙚𝙧 Cosmic (*help)",
|
name: "🟇 𝙎𝙪𝙥𝙚𝙧 Cosmic",
|
||||||
color: "#1d0054"
|
color: "#1d0054"
|
||||||
},
|
},
|
||||||
agents: {
|
agents: {
|
||||||
|
|
|
@ -3,6 +3,7 @@ import { ServiceAgent } from "../ServiceAgent";
|
||||||
import { CommandHandler } from "../../commands/CommandHandler";
|
import { CommandHandler } from "../../commands/CommandHandler";
|
||||||
import { Cursor } from "./Cursor";
|
import { Cursor } from "./Cursor";
|
||||||
import { ChatMessage } from "../console/MicroHandler";
|
import { ChatMessage } from "../console/MicroHandler";
|
||||||
|
import { help as helpCommand } from "../../commands/commands/general/help";
|
||||||
|
|
||||||
export class MPPAgent extends ServiceAgent<Client> {
|
export class MPPAgent extends ServiceAgent<Client> {
|
||||||
public cursor: Cursor;
|
public cursor: Cursor;
|
||||||
|
@ -40,8 +41,10 @@ export class MPPAgent extends ServiceAgent<Client> {
|
||||||
});
|
});
|
||||||
|
|
||||||
this.client.on("a", async msg => {
|
this.client.on("a", async msg => {
|
||||||
|
// Construct database ID
|
||||||
const _id = "MPP_" + this.client.uri + "_" + msg.p._id;
|
const _id = "MPP_" + this.client.uri + "_" + msg.p._id;
|
||||||
|
|
||||||
|
// Emit chat event (used by microhandler)
|
||||||
this.emit("chat", {
|
this.emit("chat", {
|
||||||
m: "a",
|
m: "a",
|
||||||
a: msg.a,
|
a: msg.a,
|
||||||
|
@ -54,8 +57,10 @@ export class MPPAgent extends ServiceAgent<Client> {
|
||||||
originalMessage: msg
|
originalMessage: msg
|
||||||
} as ChatMessage);
|
} as ChatMessage);
|
||||||
|
|
||||||
|
// Construct command arguments
|
||||||
let args = msg.a.split(" ");
|
let args = msg.a.split(" ");
|
||||||
|
|
||||||
|
// Run command and get output
|
||||||
const str = await CommandHandler.handleCommand(
|
const str = await CommandHandler.handleCommand(
|
||||||
{
|
{
|
||||||
m: "command",
|
m: "command",
|
||||||
|
@ -73,6 +78,7 @@ export class MPPAgent extends ServiceAgent<Client> {
|
||||||
this
|
this
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Send message in chat
|
||||||
if (str) {
|
if (str) {
|
||||||
if (typeof str == "string") {
|
if (typeof str == "string") {
|
||||||
if (str.includes("\n")) {
|
if (str.includes("\n")) {
|
||||||
|
@ -95,32 +101,62 @@ export class MPPAgent extends ServiceAgent<Client> {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
this.on("send chat", text => {
|
this.on("send chat", (text: string) => {
|
||||||
|
// Send message in chat
|
||||||
|
if (text.length > 512) {
|
||||||
|
// Split every 512 chars
|
||||||
|
for (let i = 0; i < text.length; i += 512) {
|
||||||
|
let small = text.substring(i, i + 512);
|
||||||
|
|
||||||
|
this.client.sendArray([
|
||||||
|
{
|
||||||
|
m: "a",
|
||||||
|
message: `\u034f${small}`
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
this.client.sendArray([
|
this.client.sendArray([
|
||||||
{
|
{
|
||||||
m: "a",
|
m: "a",
|
||||||
message: `\u034f${text}`
|
message: `\u034f${text}`
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public fixUser() {
|
public fixUser() {
|
||||||
if (!this.client.user) return;
|
if (!this.client.user) return;
|
||||||
|
|
||||||
|
let after = "";
|
||||||
|
|
||||||
|
if (CommandHandler.prefixes[0])
|
||||||
|
after = ` (${CommandHandler.prefixes[0].id}${
|
||||||
|
CommandHandler.prefixes[0].spaced ? " " : ""
|
||||||
|
}${helpCommand.aliases[0]})`;
|
||||||
|
|
||||||
if (
|
if (
|
||||||
this.client.user.name !== this.desiredUser.name ||
|
!this.client.user.name.startsWith(this.desiredUser.name + after) ||
|
||||||
this.client.user.color !== this.desiredUser.color
|
this.client.user.color !== this.desiredUser.color
|
||||||
) {
|
) {
|
||||||
this.client.sendArray([
|
this.client.sendArray([
|
||||||
{
|
{
|
||||||
m: "userset",
|
m: "userset",
|
||||||
set: this.desiredUser
|
set: {
|
||||||
|
name: this.desiredUser.name + after,
|
||||||
|
color: this.desiredUser.color
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a participant object with part of their name or user ID
|
||||||
|
* @param fuzzy Part of username or user ID
|
||||||
|
* @returns Found participant or undefined
|
||||||
|
*/
|
||||||
public getParticipant(fuzzy: string) {
|
public getParticipant(fuzzy: string) {
|
||||||
for (const p of Object.values(this.client.ppl)) {
|
for (const p of Object.values(this.client.ppl)) {
|
||||||
if (!p._id.includes(fuzzy) && !p.name.includes(fuzzy)) return;
|
if (!p._id.includes(fuzzy) && !p.name.includes(fuzzy)) return;
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
import { exec } from "child_process";
|
||||||
|
|
||||||
|
// https://stackoverflow.com/questions/62225567/get-current-git-branch-with-node-js
|
||||||
|
export function getGitBranch() {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
exec("git rev-parse --abbrev-ref HEAD", (err, stdout, stderr) => {
|
||||||
|
if (err || typeof stdout !== "string") reject(err);
|
||||||
|
|
||||||
|
resolve(stdout.split("\n").join(""));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function isMainBranch() {
|
||||||
|
const branch = await getGitBranch();
|
||||||
|
return branch === "main" || branch === "master";
|
||||||
|
}
|
Loading…
Reference in New Issue