Optimise Help Msg & Wrong Channel Warning

This one involves a fair amount of reworking of the way functions operate, all checks for being in private or bot sandbox have been removed from functions and that functionality is now applied through privateOrSandboxOnly(), passing the message, channel warning, function to be called and then an array of arguments, sans message, as that's automatically attached at the head as all primary functions require the message anyway. while this makes each case entry a bit longer, it does reduce code reuse and potential for old code being left in, since each function had to previously be updated individually if something happened with the way these tests were carried out.

I've yet to find a way to allow us to set the export description and the help message in one fell swoop, so for now I've manually set the description. The help message itself is now broken down into pairs of subcommand and description, the subcommand will be indented once, while the description will be indented twice.

The way the help function now works is to allow everything to be set at the start, without needing to hunt all the way down to find the duplicate help message. Now everything can be replaced in the main function, though this will require a bit of computation with each request presently, as I don't know if or how the exported functions can access constants defined outside them. This can be optimised later if need be and at the very least shouldn't slow things down very much with the few entries that there are.

Unfortunately changing the way that the help message works does involve parameterising the help message itself for any function that requires it, but this also provides a helpful indicator of what functions might fail and fall back on the help function.
This commit is contained in:
ProfessorDey 2018-02-01 10:33:18 +00:00 committed by GitHub
parent a7e72723d5
commit bef28e3e02
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -10,21 +10,42 @@ exports.commands = [
]
exports.tip = {
usage: "<subcommand>",
description: 'balance: get your balance\n deposit: get address for your deposits\n withdraw ADDRESS AMOUNT: withdraw AMOUNT credits to ADDRESS\n [private] <user> <amount>: mention a user with @ and then the amount to tip them, or put private before the user to tip them privately.\n Key: [] : Optionally include contained keyword, <> : Replace with appropriate value.',
description: '\t[help]\n\t\tGet this message\n\tbalance\n\t\tGet your balance\n\tdeposit\n\t\tGet address for your deposits\n\twithdraw ADDRESS AMOUNT\n\t\tWithdraw AMOUNT credits to ADDRESS\n\t[private] <user> <amount>\n\t\tMention a user with @ and then the amount to tip them, or put private before the user to tip them privately.\nKey: [] : Optionally include contained keyword, <> : Replace with appropriate value.',
process: async function (bot, msg, suffix) {
let tipper = msg.author.id.replace('!', ''),
words = msg.content.trim().split(' ').filter(function (n) { return n !== ""; }),
subcommand = words.length >= 2 ? words[1] : 'help';
subcommand = words.length >= 2 ? words[1] : 'help',
helpmsgparts = [['[help]', 'Get this message'],
['balance', 'Get your balance'],
['deposit', 'Get address for your deposits'],
['withdraw ADDRESS AMOUNT', 'Withdraw AMOUNT credits to ADDRESS'],
['[private] <user> <amount>', 'Mention a user with @ and then the amount to tip them, or put private before the user to tip them privately.']],
helpmsg = '```**!tip**\n' + formatDescriptions(helpmsgparts) + 'Key: [] : Optionally include contained keyword, <> : Replace with appropriate value.```',
channelwarning = 'Please use <#369896313082478594> or DMs to talk to bots.';
switch (subcommand) {
case 'help': doHelp(msg); break;
case 'help': privateOrSandboxOnly(msg, channelwarning, doHelp, [helpmsg]); break;
case 'balance': doBalance(msg, tipper); break;
case 'deposit': doDeposit(msg, tipper); break;
case 'withdraw': doWithdraw(msg, tipper, words); break;
default: doTip(msg, tipper, words);
case 'deposit': privateOrSandboxOnly(msg, channelwarning, doDeposit, [tipper]); break;
case 'withdraw': privateOrSandboxOnly(msg, channelwarning, doWithdraw, [tipper, words, helpmsg]); break;
default: doTip(msg, tipper, words, helpmsg);
}
}
}
function privateOrSandboxOnly(message, wrongchannelmsg, fn, args) {
if (!inPrivateOrBotSandbox(message)) {
message.reply(wrongchannelmsg);
return;
}
fn.apply(null, [message, ...args]);
}
function doHelp(message, helpmsg) {
message.author.send(helpmsg);
}
function doBalance(message, tipper) {
lbry.getBalance(tipper, 1, function (err, balance) {
if (err) {
@ -38,10 +59,6 @@ function doBalance(message, tipper) {
function doDeposit(message, tipper) {
if (!inPrivateOrBotSandbox(message)) {
message.reply('Please use <#369896313082478594> or DMs to talk to bots.');
return;
}
getAddress(tipper, function (err, address) {
if (err) {
message.reply('Error getting deposit address');
@ -53,18 +70,14 @@ function doDeposit(message, tipper) {
}
function doWithdraw(message, tipper, words) {
if (!inPrivateOrBotSandbox(message)) {
message.reply('Please use <#369896313082478594> or DMs to talk to bots.');
return;
}
function doWithdraw(message, tipper, words, helpmsg) {
if (words.length < 4) {
doHelp(message);
doHelp(message, helpmsg);
return;
}
var address = words[2],
amount = getValidatedAmount(words[3]);
amount = getValidatedAmount(words[3]);
if (amount === null) {
message.reply('I dont know how to withdraw that many credits');
@ -82,9 +95,9 @@ function doWithdraw(message, tipper, words) {
}
function doTip(message, tipper, words) {
function doTip(message, tipper, words, helpmsg) {
if (words.length < 3 || !words) {
doHelp(message);
doHelp(message, helpmsg);
return;
}
@ -111,14 +124,6 @@ function doTip(message, tipper, words) {
}
function doHelp(message) {
if (!inPrivateOrBotSandbox(message)) {
message.reply('Sent you help via DM! Please use <#369896313082478594> or DMs to talk to bots.');
}
message.author.send('**!tip**\n balance: get your balance\n deposit: get address for your deposits\n withdraw ADDRESS AMOUNT: withdraw AMOUNT credits to ADDRESS\n [private] <user> <amount>: mention a user with @ and then the amount to tip them, or put private before the user to tip them privately.\n Key: [] : Optionally include contained keyword, <> : Replace with appropriate value.');
}
function sendLbc(message, tipper, recipient, amount, privacyFlag) {
getAddress(recipient, function (err, address) {
if (err) {
@ -169,6 +174,7 @@ function getAddress(userId, cb) {
});
}
function inPrivateOrBotSandbox(msg) {
if ((msg.channel.type == 'dm') || (msg.channel.id === '369896313082478594')) {
return true;
@ -177,6 +183,7 @@ function inPrivateOrBotSandbox(msg) {
}
}
function getValidatedAmount(amount) {
amount = amount.trim();
if (amount.toLowerCase().endsWith('lbc')) {
@ -189,3 +196,9 @@ function getValidatedAmount(amount) {
function txLink(txId) {
return "<https://explorer.lbry.io/tx/" + txId + ">";
}
function formatDescriptions(msgparts) {
return msgparts.map(elem => '\t' + elem[0] + '\n\t\t' + elem[1] + '\n')
.join('');
}