Made Tell an actual command.

This commit is contained in:
Erik C. Thauvin 2020-03-30 21:58:54 -07:00
parent d9b1cbceff
commit 0ec1e75106
2 changed files with 73 additions and 65 deletions

View file

@ -258,6 +258,9 @@ public class Mobibot extends PircBot {
commands.add(new Comment());
commands.add(new Posting());
commands.add(new Tags());
// Get the tell command settings
tell = new Tell(this, p.getProperty("tell-max-days"), p.getProperty("tell-max-size"));
commands.add(tell);
commands.add(new UrlMgr(p.getProperty("tags", ""), p.getProperty("tags-keywords", "")));
commands.add(new View());
@ -290,9 +293,6 @@ public class Mobibot extends PircBot {
}
});
// Get the tell command settings
tell = new Tell(this, p.getProperty("tell-max-days"), p.getProperty("tell-max-size"));
// Save the entries
UrlMgr.saveEntries(this, true);
}
@ -624,8 +624,7 @@ public class Mobibot extends PircBot {
send(sender, "Type a URL on " + ircChannel + " to post it.", isPrivate);
send(sender, "For more information on a specific command, type:", isPrivate);
send(sender,
Utils.helpIndent(
((isPrivate) ? "/msg " + getNick() : getNick() + ':') + " " + Constants.HELP_CMD + " <command>"),
Utils.helpIndent(Utils.botCommand(getNick(), isPrivate) + Constants.HELP_CMD + " <command>"),
isPrivate);
send(sender, "The commands are:", isPrivate);
@ -702,8 +701,6 @@ public class Mobibot extends PircBot {
if (lcTopic.equals(getChannelName())) {
send(sender, "To list the last 5 posts from the channel's weblog:", isPrivate);
send(sender, Utils.helpIndent(getNick() + ": " + getChannelName()), isPrivate);
} else if (Tell.TELL_CMD.equals(lcTopic) && tell.isEnabled()) {
tell.helpResponse(sender, isPrivate);
} else {
// Command, Modules or Default
if (!helpCommands(sender, topic, isPrivate) && !helpModules(sender, lcTopic, isPrivate)) {
@ -796,8 +793,6 @@ public class Mobibot extends PircBot {
helpResponse(sender, args, false);
} else if (cmd.equalsIgnoreCase(getChannelName())) { // mobibot: <channel>
feedResponse(sender);
} else if (cmd.startsWith(Tell.TELL_CMD) && tell.isEnabled()) { // mobibot: tell
tell.response(sender, args, false);
} else {
boolean skip = false;
// Commands
@ -820,8 +815,7 @@ public class Mobibot extends PircBot {
}
}
}
} else {
// Commands
} else { // Commands
for (final AbstractCommand command : commands) {
if (command.matches(message)) {
command.commandResponse(this, sender, login, message, isOp(sender), false);
@ -880,8 +874,6 @@ public class Mobibot extends PircBot {
sleep(3);
quitServer("The Bot Is Out There!");
System.exit(0);
} else if (Tell.TELL_CMD.equals(cmd) && tell.isEnabled()) { // tell
tell.response(sender, args, true);
} else {
for (final AbstractCommand command : commands) {
if (command.getCommand().startsWith(cmd)) {

View file

@ -34,8 +34,10 @@ package net.thauvin.erik.mobibot.commands.tell;
import net.thauvin.erik.mobibot.Mobibot;
import net.thauvin.erik.mobibot.Utils;
import net.thauvin.erik.mobibot.commands.AbstractCommand;
import net.thauvin.erik.mobibot.commands.links.View;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
@ -47,7 +49,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
* @created 2016-07-02
* @since 1.0
*/
public class Tell {
public class Tell extends AbstractCommand {
/**
* The tell command.
*/
@ -111,8 +113,8 @@ public class Tell {
}
// Delete message.
private void deleteMessage(final String sender, final String cmds, final boolean isPrivate) {
final String[] split = cmds.split(" ");
private void deleteMessage(final String sender, final String args, final boolean isOp, final boolean isPrivate) {
final String[] split = args.split(" ");
if (split.length == 2) {
final String id = split[1];
@ -158,26 +160,65 @@ public class Tell {
}
}
} else {
helpResponse(sender, isPrivate);
helpResponse(bot, args, sender, isOp, isPrivate);
}
}
/**
* Responds with Constants.
*
* @param sender The sender.
* @param isPrivate The private flag.
*/
public void helpResponse(final String sender, final boolean isPrivate) {
bot.send(sender, "To send a message to someone when they join the channel:", isPrivate);
bot.send(sender, Utils.helpIndent(bot.getNick() + ": " + TELL_CMD + " <nick> <message>"), isPrivate);
@NotNull
@Override
public String getCommand() {
return TELL_CMD;
}
bot.send(sender, "To view queued and sent messages:", isPrivate);
bot.send(sender, Utils.helpIndent(bot.getNick() + ": " + TELL_CMD + ' ' + View.VIEW_CMD), isPrivate);
@NotNull
@Override
public List<String> getHelp() {
return List.of("To send a message to someone when they join the channel:",
Utils.helpIndent("%s " + TELL_CMD + " <nick> <message>"),
"To view queued and sent messages:",
Utils.helpIndent("%s " + TELL_CMD + ' ' + View.VIEW_CMD),
"Messages are kept for " + Utils.bold(maxDays) + Utils.plural(maxDays, " day.", " days."));
}
bot.send(sender,
"Messages are kept for " + Utils.bold(maxDays) + Utils.plural(maxDays, " day.", " days."),
isPrivate);
@Override
public boolean isOp() {
return false;
}
@Override
public boolean isPublic() {
return true;
}
@Override
public boolean isVisible() {
return true;
}
@Override
public void commandResponse(@NotNull final Mobibot bot,
@NotNull final String sender,
@NotNull final String login,
@NotNull final String args,
final boolean isOp,
final boolean isPrivate) {
if (StringUtils.isBlank(args)) {
helpResponse(bot, args, sender, isOp, isPrivate);
} else if (args.startsWith(View.VIEW_CMD)) {
if (bot.isOp(sender) && (View.VIEW_CMD + ' ' + TELL_ALL_KEYWORD).equals(args)) {
viewAll(sender, isPrivate);
} else {
viewMessages(sender, isPrivate);
}
} else if (args.startsWith(TELL_DEL_KEYWORD + ' ')) {
deleteMessage(sender, args, isOp, isPrivate);
} else {
newMessage(sender, args, isOp, isPrivate);
}
if (clean()) {
save();
}
}
/**
@ -190,8 +231,8 @@ public class Tell {
}
// New message.
private void newMessage(final String sender, final String cmds, final boolean isPrivate) {
final String[] split = cmds.split(" ", 2);
private void newMessage(final String sender, final String args, final boolean isOp, final boolean isPrivate) {
final String[] split = args.split(" ", 2);
if (split.length == 2 && (StringUtils.isNotBlank(split[1]) && split[1].contains(" "))) {
if (messages.size() < maxSize) {
@ -202,39 +243,12 @@ public class Tell {
save();
bot.send(sender, "Message [ID " + message.getId() + "] was queued for "
+ Utils.bold(message.getRecipient()), true);
+ Utils.bold(message.getRecipient()), isPrivate);
} else {
bot.send(sender, "Sorry, the messages queue is currently full.", true);
bot.send(sender, "Sorry, the messages queue is currently full.", isPrivate);
}
} else {
helpResponse(sender, isPrivate);
}
}
/**
* Processes the commands.
*
* @param sender The sender's nick.
* @param cmds The commands string.
* @param isPrivate The private flag.
*/
public void response(final String sender, final String cmds, final boolean isPrivate) {
if (StringUtils.isBlank(cmds)) {
helpResponse(sender, isPrivate);
} else if (cmds.startsWith(View.VIEW_CMD)) {
if (bot.isOp(sender) && (View.VIEW_CMD + ' ' + TELL_ALL_KEYWORD).equals(cmds)) {
viewAll(sender, isPrivate);
} else {
viewMessages(sender, isPrivate);
}
} else if (cmds.startsWith(TELL_DEL_KEYWORD + ' ')) {
deleteMessage(sender, cmds, isPrivate);
} else {
newMessage(sender, cmds, isPrivate);
}
if (clean()) {
save();
helpResponse(bot, args, sender, isOp, isPrivate);
}
}
@ -360,8 +374,10 @@ public class Tell {
} else {
bot.send(sender, "To delete one or all delivered messages:", isPrivate);
bot.send(sender,
Utils.helpIndent(bot.getNick() + ": " + TELL_CMD + ' ' + TELL_DEL_KEYWORD + " <id|"
+ TELL_ALL_KEYWORD + '>'), isPrivate);
Utils.helpIndent(
Utils.botCommand(bot.getNick(), isPrivate) + TELL_CMD + ' ' + TELL_DEL_KEYWORD + " <id|"
+ TELL_ALL_KEYWORD + '>'),
isPrivate);
bot.send(sender,
"Messages are kept for " + Utils.bold(maxDays) + Utils.plural(maxDays, " day.", " days."),
isPrivate);