weirdness
This commit is contained in:
parent
1406f46b2e
commit
60b55f582b
@ -43,7 +43,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "utility",
|
"name": "utility",
|
||||||
"version": "3.1.10"
|
"version": "3.2.1"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"typescript": true
|
"typescript": true
|
||||||
|
@ -2,9 +2,14 @@
|
|||||||
"main": "plugin.js",
|
"main": "plugin.js",
|
||||||
"name": "utility",
|
"name": "utility",
|
||||||
"description": "Utility commands and math operations",
|
"description": "Utility commands and math operations",
|
||||||
"version": "3.1.10",
|
"version": "3.2.1",
|
||||||
"tags": ["commands", "tools"],
|
"tags": [
|
||||||
"dependencies": ["simplecommands"],
|
"commands",
|
||||||
|
"tools"
|
||||||
|
],
|
||||||
|
"dependencies": [
|
||||||
|
"simplecommands"
|
||||||
|
],
|
||||||
"npmDependencies": [
|
"npmDependencies": [
|
||||||
"mathjs@^9.4.4",
|
"mathjs@^9.4.4",
|
||||||
"convert-units@^3.0.0-beta.2"
|
"convert-units@^3.0.0-beta.2"
|
||||||
|
@ -6,11 +6,15 @@ import {
|
|||||||
Plugin,
|
Plugin,
|
||||||
Configurable,
|
Configurable,
|
||||||
EventListener,
|
EventListener,
|
||||||
DependencyLoad
|
DependencyLoad,
|
||||||
} from '@squeebot/core/lib/plugin';
|
} from '@squeebot/core/lib/plugin';
|
||||||
|
|
||||||
import { IMessage, MessageResolver } from '@squeebot/core/lib/types';
|
import { IMessage, MessageResolver } from '@squeebot/core/lib/types';
|
||||||
import { httpGET, parseTimeToSeconds, readableTime } from '@squeebot/core/lib/common';
|
import {
|
||||||
|
httpGET,
|
||||||
|
parseTimeToSeconds,
|
||||||
|
readableTime,
|
||||||
|
} from '@squeebot/core/lib/common';
|
||||||
|
|
||||||
import { logger } from '@squeebot/core/lib/core';
|
import { logger } from '@squeebot/core/lib/core';
|
||||||
import {
|
import {
|
||||||
@ -24,17 +28,11 @@ import {
|
|||||||
ASCIIBinaryConverter,
|
ASCIIBinaryConverter,
|
||||||
ASCIIHexConverter,
|
ASCIIHexConverter,
|
||||||
base64Converter,
|
base64Converter,
|
||||||
baseConverter
|
baseConverter,
|
||||||
} from './convert';
|
} from './convert';
|
||||||
|
|
||||||
type CEXResponse = { [key: string]: number };
|
type CEXResponse = { [key: string]: number };
|
||||||
|
|
||||||
const cexCache: { [key: string]: number | CEXResponse } = {
|
|
||||||
expiry: 0,
|
|
||||||
date: 0,
|
|
||||||
cache: {},
|
|
||||||
};
|
|
||||||
|
|
||||||
// Run mathjs in a separate thread to avoid the killing of the main process
|
// Run mathjs in a separate thread to avoid the killing of the main process
|
||||||
function opMath(expression: string): Promise<string> {
|
function opMath(expression: string): Promise<string> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
@ -103,7 +101,7 @@ function pingTcpServer(host: string, port: number): Promise<number> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const pingHost = net.connect({port, host}, () => {
|
const pingHost = net.connect({ port, host }, () => {
|
||||||
timeA = new Date().getTime();
|
timeA = new Date().getTime();
|
||||||
returnResults(true, timeA - timeB);
|
returnResults(true, timeA - timeB);
|
||||||
pingHost.end();
|
pingHost.end();
|
||||||
@ -135,7 +133,13 @@ function addCommands(plugin: UtilityPlugin, commands: any): void {
|
|||||||
|
|
||||||
cmds.push({
|
cmds.push({
|
||||||
name: 'binary',
|
name: 'binary',
|
||||||
execute: async (msg: IMessage, msr: MessageResolver, spec: any, prefix: string, ...simplified: any[]): Promise<boolean> => {
|
execute: async (
|
||||||
|
msg: IMessage,
|
||||||
|
msr: MessageResolver,
|
||||||
|
spec: any,
|
||||||
|
prefix: string,
|
||||||
|
...simplified: any[]
|
||||||
|
): Promise<boolean> => {
|
||||||
try {
|
try {
|
||||||
const result = ASCIIBinaryConverter(msg.text, simplified);
|
const result = ASCIIBinaryConverter(msg.text, simplified);
|
||||||
msg.resolve(`> ${result}`);
|
msg.resolve(`> ${result}`);
|
||||||
@ -145,12 +149,18 @@ function addCommands(plugin: UtilityPlugin, commands: any): void {
|
|||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
description: 'Encode/decode binary (ASCII only)',
|
description: 'Encode/decode binary (ASCII only)',
|
||||||
usage: '<ENCODE/DECODE> <message>'
|
usage: '<ENCODE/DECODE> <message>',
|
||||||
});
|
});
|
||||||
|
|
||||||
cmds.push({
|
cmds.push({
|
||||||
name: 'hexstr',
|
name: 'hexstr',
|
||||||
execute: async (msg: IMessage, msr: MessageResolver, spec: any, prefix: string, ...simplified: any[]): Promise<boolean> => {
|
execute: async (
|
||||||
|
msg: IMessage,
|
||||||
|
msr: MessageResolver,
|
||||||
|
spec: any,
|
||||||
|
prefix: string,
|
||||||
|
...simplified: any[]
|
||||||
|
): Promise<boolean> => {
|
||||||
try {
|
try {
|
||||||
const result = ASCIIHexConverter(msg.text, simplified);
|
const result = ASCIIHexConverter(msg.text, simplified);
|
||||||
msg.resolve(`> ${result}`);
|
msg.resolve(`> ${result}`);
|
||||||
@ -160,12 +170,18 @@ function addCommands(plugin: UtilityPlugin, commands: any): void {
|
|||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
description: 'Encode/decode hexadecimal (ASCII only)',
|
description: 'Encode/decode hexadecimal (ASCII only)',
|
||||||
usage: '<ENCODE/DECODE> <string>'
|
usage: '<ENCODE/DECODE> <string>',
|
||||||
});
|
});
|
||||||
|
|
||||||
cmds.push({
|
cmds.push({
|
||||||
name: 'base64',
|
name: 'base64',
|
||||||
execute: async (msg: IMessage, msr: MessageResolver, spec: any, prefix: string, ...simplified: any[]): Promise<boolean> => {
|
execute: async (
|
||||||
|
msg: IMessage,
|
||||||
|
msr: MessageResolver,
|
||||||
|
spec: any,
|
||||||
|
prefix: string,
|
||||||
|
...simplified: any[]
|
||||||
|
): Promise<boolean> => {
|
||||||
try {
|
try {
|
||||||
const result = base64Converter(msg.text, simplified);
|
const result = base64Converter(msg.text, simplified);
|
||||||
msg.resolve(`> ${result}`);
|
msg.resolve(`> ${result}`);
|
||||||
@ -175,12 +191,18 @@ function addCommands(plugin: UtilityPlugin, commands: any): void {
|
|||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
description: 'Encode/decode base64 (ASCII only)',
|
description: 'Encode/decode base64 (ASCII only)',
|
||||||
usage: '<ENCODE/DECODE> <string>'
|
usage: '<ENCODE/DECODE> <string>',
|
||||||
});
|
});
|
||||||
|
|
||||||
cmds.push({
|
cmds.push({
|
||||||
name: 'numsys',
|
name: 'numsys',
|
||||||
execute: async (msg: IMessage, msr: MessageResolver, spec: any, prefix: string, ...simplified: any[]): Promise<boolean> => {
|
execute: async (
|
||||||
|
msg: IMessage,
|
||||||
|
msr: MessageResolver,
|
||||||
|
spec: any,
|
||||||
|
prefix: string,
|
||||||
|
...simplified: any[]
|
||||||
|
): Promise<boolean> => {
|
||||||
try {
|
try {
|
||||||
const result = baseConverter(simplified);
|
const result = baseConverter(simplified);
|
||||||
msg.resolve(`> ${result}`);
|
msg.resolve(`> ${result}`);
|
||||||
@ -191,23 +213,35 @@ function addCommands(plugin: UtilityPlugin, commands: any): void {
|
|||||||
},
|
},
|
||||||
description: 'Convert a value into a value in another numbering system.',
|
description: 'Convert a value into a value in another numbering system.',
|
||||||
usage: '<value> <bin/dec/hex/oct> <bin/dec/hex/oct>',
|
usage: '<value> <bin/dec/hex/oct> <bin/dec/hex/oct>',
|
||||||
aliases: ['convertnumbers', 'cvnums']
|
aliases: ['convertnumbers', 'cvnums'],
|
||||||
});
|
});
|
||||||
|
|
||||||
cmds.push({
|
cmds.push({
|
||||||
name: 'convertseconds',
|
name: 'convertseconds',
|
||||||
execute: async (msg: IMessage, msr: MessageResolver, spec: any, prefix: string, ...simplified: any[]): Promise<boolean> => {
|
execute: async (
|
||||||
|
msg: IMessage,
|
||||||
|
msr: MessageResolver,
|
||||||
|
spec: any,
|
||||||
|
prefix: string,
|
||||||
|
...simplified: any[]
|
||||||
|
): Promise<boolean> => {
|
||||||
msg.resolve(readableTime(parseInt(simplified[0], 10)));
|
msg.resolve(readableTime(parseInt(simplified[0], 10)));
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
description: 'Convert seconds to years days hours minutes seconds.',
|
description: 'Convert seconds to years days hours minutes seconds.',
|
||||||
usage: '<seconds>',
|
usage: '<seconds>',
|
||||||
aliases: ['cvs', 'parseseconds']
|
aliases: ['cvs', 'parseseconds'],
|
||||||
});
|
});
|
||||||
|
|
||||||
cmds.push({
|
cmds.push({
|
||||||
name: 'converttime',
|
name: 'converttime',
|
||||||
execute: async (msg: IMessage, msr: MessageResolver, spec: any, prefix: string, ...simplified: any[]): Promise<boolean> => {
|
execute: async (
|
||||||
|
msg: IMessage,
|
||||||
|
msr: MessageResolver,
|
||||||
|
spec: any,
|
||||||
|
prefix: string,
|
||||||
|
...simplified: any[]
|
||||||
|
): Promise<boolean> => {
|
||||||
const str = msg.text.split(' ').slice(1).join(' ');
|
const str = msg.text.split(' ').slice(1).join(' ');
|
||||||
|
|
||||||
if (!str) {
|
if (!str) {
|
||||||
@ -219,13 +253,20 @@ function addCommands(plugin: UtilityPlugin, commands: any): void {
|
|||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
description: 'Convert ywdhms to seconds.',
|
description: 'Convert ywdhms to seconds.',
|
||||||
usage: '[<years>y] [<weeks>w] [<days>d] [<hours>h] [<minutes>m] [<seconds>s]',
|
usage:
|
||||||
aliases: ['cvt', 'parsetime']
|
'[<years>y] [<weeks>w] [<days>d] [<hours>h] [<minutes>m] [<seconds>s]',
|
||||||
|
aliases: ['cvt', 'parsetime'],
|
||||||
});
|
});
|
||||||
|
|
||||||
cmds.push({
|
cmds.push({
|
||||||
name: 'reconverttime',
|
name: 'reconverttime',
|
||||||
execute: async (msg: IMessage, msr: MessageResolver, spec: any, prefix: string, ...simplified: any[]): Promise<boolean> => {
|
execute: async (
|
||||||
|
msg: IMessage,
|
||||||
|
msr: MessageResolver,
|
||||||
|
spec: any,
|
||||||
|
prefix: string,
|
||||||
|
...simplified: any[]
|
||||||
|
): Promise<boolean> => {
|
||||||
const str = msg.text.split(' ').slice(1).join(' ');
|
const str = msg.text.split(' ').slice(1).join(' ');
|
||||||
|
|
||||||
if (!str) {
|
if (!str) {
|
||||||
@ -238,12 +279,18 @@ function addCommands(plugin: UtilityPlugin, commands: any): void {
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
aliases: ['rcvt']
|
aliases: ['rcvt'],
|
||||||
});
|
});
|
||||||
|
|
||||||
cmds.push({
|
cmds.push({
|
||||||
name: 'eval',
|
name: 'eval',
|
||||||
execute: async (msg: IMessage, msr: MessageResolver, spec: any, prefix: string, ...simplified: any[]): Promise<boolean> => {
|
execute: async (
|
||||||
|
msg: IMessage,
|
||||||
|
msr: MessageResolver,
|
||||||
|
spec: any,
|
||||||
|
prefix: string,
|
||||||
|
...simplified: any[]
|
||||||
|
): Promise<boolean> => {
|
||||||
if (!simplified[0]) {
|
if (!simplified[0]) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -261,55 +308,83 @@ function addCommands(plugin: UtilityPlugin, commands: any): void {
|
|||||||
},
|
},
|
||||||
aliases: ['math', 'calc'],
|
aliases: ['math', 'calc'],
|
||||||
usage: '<expression>',
|
usage: '<expression>',
|
||||||
description: 'Evaluate a math expression (See https://mathjs.org/)'
|
description: 'Evaluate a math expression (See https://mathjs.org/)',
|
||||||
});
|
});
|
||||||
|
|
||||||
cmds.push({
|
cmds.push({
|
||||||
name: 'userid',
|
name: 'userid',
|
||||||
execute: async (msg: IMessage, msr: MessageResolver, spec: any, prefix: string, ...simplified: any[]): Promise<boolean> => {
|
execute: async (
|
||||||
|
msg: IMessage,
|
||||||
|
msr: MessageResolver,
|
||||||
|
spec: any,
|
||||||
|
prefix: string,
|
||||||
|
...simplified: any[]
|
||||||
|
): Promise<boolean> => {
|
||||||
msg.resolve('Your userId is %s.', msg.fullSenderID);
|
msg.resolve('Your userId is %s.', msg.fullSenderID);
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
description: 'Display your userId (internal user identification)',
|
description: 'Display your userId (internal user identification)',
|
||||||
hidden: true
|
hidden: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
cmds.push({
|
cmds.push({
|
||||||
name: 'roomid',
|
name: 'roomid',
|
||||||
execute: async (msg: IMessage, msr: MessageResolver, spec: any, prefix: string, ...simplified: any[]): Promise<boolean> => {
|
execute: async (
|
||||||
|
msg: IMessage,
|
||||||
|
msr: MessageResolver,
|
||||||
|
spec: any,
|
||||||
|
prefix: string,
|
||||||
|
...simplified: any[]
|
||||||
|
): Promise<boolean> => {
|
||||||
msg.resolve('Current roomId is %s.', msg.fullRoomID);
|
msg.resolve('Current roomId is %s.', msg.fullRoomID);
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
description: 'Display the internal identification of this room',
|
description: 'Display the internal identification of this room',
|
||||||
hidden: true
|
hidden: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
cmds.push({
|
cmds.push({
|
||||||
name: 'serverid',
|
name: 'serverid',
|
||||||
execute: async (msg: IMessage, msr: MessageResolver, spec: any, prefix: string, ...simplified: any[]): Promise<boolean> => {
|
execute: async (
|
||||||
|
msg: IMessage,
|
||||||
|
msr: MessageResolver,
|
||||||
|
spec: any,
|
||||||
|
prefix: string,
|
||||||
|
...simplified: any[]
|
||||||
|
): Promise<boolean> => {
|
||||||
if (msg.target && msg.target.server) {
|
if (msg.target && msg.target.server) {
|
||||||
msg.resolve('Current server ID is s:%s.', msg.target.server);
|
msg.resolve('Current server ID is s:%s.', msg.target.server);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
msg.resolve('This protocol does not specify a server. ' +
|
msg.resolve(
|
||||||
'Either the protocol is for a single server only or the server variable is not supported.');
|
'This protocol does not specify a server. ' +
|
||||||
|
'Either the protocol is for a single server only or the server variable is not supported.'
|
||||||
|
);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
description: 'Display the internal identification of this room',
|
description: 'Display the internal identification of this room',
|
||||||
hidden: true
|
hidden: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
cmds.push({
|
cmds.push({
|
||||||
name: 'rgb2hex',
|
name: 'rgb2hex',
|
||||||
execute: async (msg: IMessage, msr: MessageResolver, spec: any, prefix: string, ...simplified: any[]): Promise<boolean> => {
|
execute: async (
|
||||||
|
msg: IMessage,
|
||||||
|
msr: MessageResolver,
|
||||||
|
spec: any,
|
||||||
|
prefix: string,
|
||||||
|
...simplified: any[]
|
||||||
|
): Promise<boolean> => {
|
||||||
if (!simplified[0]) {
|
if (!simplified[0]) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const fullmsg = msg.text.split(' ').slice(1).join(' ');
|
const fullmsg = msg.text.split(' ').slice(1).join(' ');
|
||||||
const channels = fullmsg.match(/(rgb)?\(?(\d{1,3}),?\s(\d{1,3}),?\s(\d{1,3})\)?/i);
|
const channels = fullmsg.match(
|
||||||
|
/(rgb)?\(?(\d{1,3}),?\s(\d{1,3}),?\s(\d{1,3})\)?/i
|
||||||
|
);
|
||||||
if (!channels || channels[2] == null) {
|
if (!channels || channels[2] == null) {
|
||||||
msg.resolve('Invalid parameter');
|
msg.resolve('Invalid parameter');
|
||||||
return true;
|
return true;
|
||||||
@ -328,18 +403,26 @@ function addCommands(plugin: UtilityPlugin, commands: any): void {
|
|||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
description: 'Convert RGB to HEX colors',
|
description: 'Convert RGB to HEX colors',
|
||||||
usage: '[rgb](<r>, <g>, <b>)|<r> <g> <b>'
|
usage: '[rgb](<r>, <g>, <b>)|<r> <g> <b>',
|
||||||
});
|
});
|
||||||
|
|
||||||
cmds.push({
|
cmds.push({
|
||||||
name: 'rgb2hsl',
|
name: 'rgb2hsl',
|
||||||
execute: async (msg: IMessage, msr: MessageResolver, spec: any, prefix: string, ...simplified: any[]): Promise<boolean> => {
|
execute: async (
|
||||||
|
msg: IMessage,
|
||||||
|
msr: MessageResolver,
|
||||||
|
spec: any,
|
||||||
|
prefix: string,
|
||||||
|
...simplified: any[]
|
||||||
|
): Promise<boolean> => {
|
||||||
if (!simplified[0]) {
|
if (!simplified[0]) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const fullmsg = msg.text.split(' ').slice(1).join(' ');
|
const fullmsg = msg.text.split(' ').slice(1).join(' ');
|
||||||
const channels = fullmsg.match(/(rgb)?\(?(\d{1,3}),?\s(\d{1,3}),?\s(\d{1,3})\)?/i);
|
const channels = fullmsg.match(
|
||||||
|
/(rgb)?\(?(\d{1,3}),?\s(\d{1,3}),?\s(\d{1,3})\)?/i
|
||||||
|
);
|
||||||
if (!channels || channels[2] == null) {
|
if (!channels || channels[2] == null) {
|
||||||
msg.resolve('Invalid parameter');
|
msg.resolve('Invalid parameter');
|
||||||
return true;
|
return true;
|
||||||
@ -359,12 +442,18 @@ function addCommands(plugin: UtilityPlugin, commands: any): void {
|
|||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
description: 'Convert RGB to HSL colors',
|
description: 'Convert RGB to HSL colors',
|
||||||
usage: '[rgb](<r>, <g>, <b>)|<r> <g> <b>'
|
usage: '[rgb](<r>, <g>, <b>)|<r> <g> <b>',
|
||||||
});
|
});
|
||||||
|
|
||||||
cmds.push({
|
cmds.push({
|
||||||
name: 'hex2rgb',
|
name: 'hex2rgb',
|
||||||
execute: async (msg: IMessage, msr: MessageResolver, spec: any, prefix: string, ...simplified: any[]): Promise<boolean> => {
|
execute: async (
|
||||||
|
msg: IMessage,
|
||||||
|
msr: MessageResolver,
|
||||||
|
spec: any,
|
||||||
|
prefix: string,
|
||||||
|
...simplified: any[]
|
||||||
|
): Promise<boolean> => {
|
||||||
if (!simplified[0]) {
|
if (!simplified[0]) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -389,12 +478,18 @@ function addCommands(plugin: UtilityPlugin, commands: any): void {
|
|||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
description: 'Convert HEX to RGB colors',
|
description: 'Convert HEX to RGB colors',
|
||||||
usage: '#<r><g><b>|#<rr><gg><bb>'
|
usage: '#<r><g><b>|#<rr><gg><bb>',
|
||||||
});
|
});
|
||||||
|
|
||||||
cmds.push({
|
cmds.push({
|
||||||
name: 'isup',
|
name: 'isup',
|
||||||
execute: async (msg: IMessage, msr: MessageResolver, spec: any, prefix: string, ...simplified: any[]): Promise<boolean> => {
|
execute: async (
|
||||||
|
msg: IMessage,
|
||||||
|
msr: MessageResolver,
|
||||||
|
spec: any,
|
||||||
|
prefix: string,
|
||||||
|
...simplified: any[]
|
||||||
|
): Promise<boolean> => {
|
||||||
if (!simplified[0]) {
|
if (!simplified[0]) {
|
||||||
msg.resolve('Please specify host name!');
|
msg.resolve('Please specify host name!');
|
||||||
return true;
|
return true;
|
||||||
@ -432,12 +527,18 @@ function addCommands(plugin: UtilityPlugin, commands: any): void {
|
|||||||
description: 'Ping a host',
|
description: 'Ping a host',
|
||||||
usage: '<host> <port>',
|
usage: '<host> <port>',
|
||||||
aliases: ['tcpup', 'tping'],
|
aliases: ['tcpup', 'tping'],
|
||||||
hidden: true
|
hidden: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
cmds.push({
|
cmds.push({
|
||||||
name: 'convert',
|
name: 'convert',
|
||||||
execute: async (msg: IMessage, msr: MessageResolver, spec: any, prefix: string, ...simplified: any[]): Promise<boolean> => {
|
execute: async (
|
||||||
|
msg: IMessage,
|
||||||
|
msr: MessageResolver,
|
||||||
|
spec: any,
|
||||||
|
prefix: string,
|
||||||
|
...simplified: any[]
|
||||||
|
): Promise<boolean> => {
|
||||||
const tqnt = parseFloat(simplified[0]);
|
const tqnt = parseFloat(simplified[0]);
|
||||||
if (isNaN(tqnt)) {
|
if (isNaN(tqnt)) {
|
||||||
msg.resolve('Please specify a quantity, either an integer or a float!');
|
msg.resolve('Please specify a quantity, either an integer or a float!');
|
||||||
@ -484,8 +585,10 @@ function addCommands(plugin: UtilityPlugin, commands: any): void {
|
|||||||
const srcdesc = convert().describe(src);
|
const srcdesc = convert().describe(src);
|
||||||
const dstdesc = convert().describe(dst);
|
const dstdesc = convert().describe(dst);
|
||||||
|
|
||||||
const bsrcdesc = (Math.floor(tqnt) !== 1) ? srcdesc.plural : srcdesc.singular;
|
const bsrcdesc =
|
||||||
const bdstdesc = (Math.floor(res) !== 1) ? dstdesc.plural : dstdesc.singular;
|
Math.floor(tqnt) !== 1 ? srcdesc.plural : srcdesc.singular;
|
||||||
|
const bdstdesc =
|
||||||
|
Math.floor(res) !== 1 ? dstdesc.plural : dstdesc.singular;
|
||||||
|
|
||||||
msg.resolve(` ${tqnt} ${bsrcdesc} => ${res} ${bdstdesc}`);
|
msg.resolve(` ${tqnt} ${bsrcdesc} => ${res} ${bdstdesc}`);
|
||||||
return true;
|
return true;
|
||||||
@ -496,14 +599,20 @@ function addCommands(plugin: UtilityPlugin, commands: any): void {
|
|||||||
},
|
},
|
||||||
description: 'Convert between quantities in different units.',
|
description: 'Convert between quantities in different units.',
|
||||||
usage: '<number> <from unit> <to unit>',
|
usage: '<number> <from unit> <to unit>',
|
||||||
aliases: ['cv', 'unit']
|
aliases: ['cv', 'unit'],
|
||||||
});
|
});
|
||||||
|
|
||||||
cmds.push({
|
cmds.push({
|
||||||
name: 'currency',
|
name: 'currency',
|
||||||
execute: async (msg: IMessage, msr: MessageResolver, spec: any, prefix: string, ...simplified: any[]): Promise<boolean> => {
|
execute: async (
|
||||||
let ctw: CEXResponse | null = cexCache.cache as CEXResponse;
|
msg: IMessage,
|
||||||
if (cexCache.expiry < Date.now()) {
|
msr: MessageResolver,
|
||||||
|
spec: any,
|
||||||
|
prefix: string,
|
||||||
|
...simplified: any[]
|
||||||
|
): Promise<boolean> => {
|
||||||
|
let ctw: CEXResponse | null = plugin.cexCache.cache as CEXResponse;
|
||||||
|
if (plugin.cexCache.expiry < Date.now()) {
|
||||||
let fetched;
|
let fetched;
|
||||||
try {
|
try {
|
||||||
const data = await httpGET('https://api.exchangerate.host/latest');
|
const data = await httpGET('https://api.exchangerate.host/latest');
|
||||||
@ -514,21 +623,29 @@ function addCommands(plugin: UtilityPlugin, commands: any): void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!ctw || !fetched.rates) {
|
if (!ctw || !fetched.rates) {
|
||||||
msg.resolve('Could not fetch currency exchange rates at this time. Please try again later.');
|
msg.resolve(
|
||||||
|
'Could not fetch currency exchange rates at this time. Please try again later.'
|
||||||
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
cexCache.cache = fetched.rates;
|
plugin.cexCache.cache = fetched.rates;
|
||||||
cexCache.date = fetched.date;
|
plugin.cexCache.date = fetched.date;
|
||||||
cexCache.expiry = Date.now() + 86400000; // day
|
plugin.cexCache.expiry = Date.now() + 86400000; // day
|
||||||
ctw = cexCache.cache as CEXResponse;
|
ctw = plugin.cexCache.cache as CEXResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (simplified[0] === 'date') {
|
if (simplified[0] === 'date') {
|
||||||
msg.resolve('Currency exchange rates are as of %s', cexCache.date);
|
msg.resolve(
|
||||||
|
'Currency exchange rates are as of %s',
|
||||||
|
plugin.cexCache.date
|
||||||
|
);
|
||||||
return true;
|
return true;
|
||||||
} else if (simplified[0] === 'list') {
|
} else if (simplified[0] === 'list') {
|
||||||
msg.resolve('Currently supported currencies: EUR, %s', Object.keys(cexCache.cache).join(', '));
|
msg.resolve(
|
||||||
|
'Currently supported currencies: EUR, %s',
|
||||||
|
Object.keys(plugin.cexCache.cache).join(', ')
|
||||||
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -568,18 +685,24 @@ function addCommands(plugin: UtilityPlugin, commands: any): void {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const amnt = (ctw[t] * n / ctw[f]).toFixed(4);
|
const amnt = ((ctw[t] * n) / ctw[f]).toFixed(4);
|
||||||
msg.resolve('%f %s => %f %s', n, f, amnt, t);
|
msg.resolve('%f %s => %f %s', n, f, amnt, t);
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
description: 'Convert between currencies.',
|
description: 'Convert between currencies.',
|
||||||
usage: '<number> | [date | list] [<from currency>] [<to currency>]',
|
usage: '<number> | [date | list] [<from currency>] [<to currency>]',
|
||||||
aliases: ['cex', 'exchange']
|
aliases: ['cex', 'exchange'],
|
||||||
});
|
});
|
||||||
|
|
||||||
cmds.push({
|
cmds.push({
|
||||||
name: 'randomnumber',
|
name: 'randomnumber',
|
||||||
execute: async (msg: IMessage, msr: MessageResolver, spec: any, prefix: string, ...simplified: any[]): Promise<boolean> => {
|
execute: async (
|
||||||
|
msg: IMessage,
|
||||||
|
msr: MessageResolver,
|
||||||
|
spec: any,
|
||||||
|
prefix: string,
|
||||||
|
...simplified: any[]
|
||||||
|
): Promise<boolean> => {
|
||||||
if (simplified.length < 2) {
|
if (simplified.length < 2) {
|
||||||
msg.resolve('Too few arguments!');
|
msg.resolve('Too few arguments!');
|
||||||
return true;
|
return true;
|
||||||
@ -598,8 +721,13 @@ function addCommands(plugin: UtilityPlugin, commands: any): void {
|
|||||||
min = max;
|
min = max;
|
||||||
max = realMax;
|
max = realMax;
|
||||||
}
|
}
|
||||||
if (isNaN(count)) { count = 1; }
|
if (isNaN(count)) {
|
||||||
if (String(Math.abs(min)).length > 9 || String(Math.abs(max)).length > 9) {
|
count = 1;
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
String(Math.abs(min)).length > 9 ||
|
||||||
|
String(Math.abs(max)).length > 9
|
||||||
|
) {
|
||||||
msg.resolve('The numbers are too large!');
|
msg.resolve('The numbers are too large!');
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -616,15 +744,23 @@ function addCommands(plugin: UtilityPlugin, commands: any): void {
|
|||||||
},
|
},
|
||||||
description: 'Generate a random number between <min> and <max>.',
|
description: 'Generate a random number between <min> and <max>.',
|
||||||
usage: '<min> <max> [<count>]',
|
usage: '<min> <max> [<count>]',
|
||||||
aliases: ['rnum', 'rand', 'rng']
|
aliases: ['rnum', 'rand', 'rng'],
|
||||||
});
|
});
|
||||||
|
|
||||||
// FIXME: temporary code for removal
|
// FIXME: temporary code for removal
|
||||||
cmds.push({
|
cmds.push({
|
||||||
name: 'cmtest',
|
name: 'cmtest',
|
||||||
execute: async (msg: IMessage, msr: MessageResolver, spec: any, prefix: string, ...simplified: any[]): Promise<boolean> => {
|
execute: async (
|
||||||
|
msg: IMessage,
|
||||||
|
msr: MessageResolver,
|
||||||
|
spec: any,
|
||||||
|
prefix: string,
|
||||||
|
...simplified: any[]
|
||||||
|
): Promise<boolean> => {
|
||||||
console.log(simplified);
|
console.log(simplified);
|
||||||
msg.resolve(`argument 1: '${simplified[0]}' argument 2: '${simplified[1]}'`);
|
msg.resolve(
|
||||||
|
`argument 1: '${simplified[0]}' argument 2: '${simplified[1]}'`
|
||||||
|
);
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
description: 'Test the command argument parser',
|
description: 'Test the command argument parser',
|
||||||
@ -632,17 +768,25 @@ function addCommands(plugin: UtilityPlugin, commands: any): void {
|
|||||||
hidden: true,
|
hidden: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
commands.registerCommand(cmds.map((x: any) => {
|
commands.registerCommand(
|
||||||
|
cmds.map((x: any) => {
|
||||||
x.plugin = plugin.manifest.name;
|
x.plugin = plugin.manifest.name;
|
||||||
return x;
|
return x;
|
||||||
}));
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Configurable({
|
@Configurable({
|
||||||
ipfsGateway: 'https://ipfs.io',
|
ipfsGateway: 'https://ipfs.io',
|
||||||
randomMax: 64
|
randomMax: 64,
|
||||||
})
|
})
|
||||||
class UtilityPlugin extends Plugin {
|
class UtilityPlugin extends Plugin {
|
||||||
|
public cexCache: { [key: string]: number | CEXResponse } = {
|
||||||
|
expiry: 0,
|
||||||
|
date: 0,
|
||||||
|
cache: {},
|
||||||
|
};
|
||||||
|
|
||||||
@DependencyLoad('simplecommands')
|
@DependencyLoad('simplecommands')
|
||||||
addCommands(cmd: any): void {
|
addCommands(cmd: any): void {
|
||||||
addCommands(this, cmd);
|
addCommands(this, cmd);
|
||||||
@ -652,6 +796,9 @@ class UtilityPlugin extends Plugin {
|
|||||||
public unloadEventHandler(plugin: string | Plugin): void {
|
public unloadEventHandler(plugin: string | Plugin): void {
|
||||||
if (plugin === this.name || plugin === this) {
|
if (plugin === this.name || plugin === this) {
|
||||||
wipeCaches();
|
wipeCaches();
|
||||||
|
this.cexCache.expiry = 0;
|
||||||
|
this.cexCache.date = 0;
|
||||||
|
this.cexCache.cache = {};
|
||||||
this.emit('pluginUnloaded', this);
|
this.emit('pluginUnloaded', this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user