-
Notifications
You must be signed in to change notification settings - Fork 15
/
ModuleTell.java
102 lines (93 loc) · 4.34 KB
/
ModuleTell.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import org.pircbotx.Channel;
import org.pircbotx.PircBotX;
import org.pircbotx.User;
import org.pircbotx.hooks.events.ActionEvent;
import org.pircbotx.hooks.events.KickEvent;
import org.pircbotx.hooks.events.MessageEvent;
import org.pircbotx.hooks.events.ModeEvent;
import org.pircbotx.hooks.events.NoticeEvent;
import org.pircbotx.hooks.events.PrivateMessageEvent;
import org.pircbotx.hooks.events.TopicEvent;
import org.pircbotx.hooks.events.UserModeEvent;
import pl.shockah.FileLine;
import pl.shockah.StringTools;
import pl.shockah.shocky.Module;
import pl.shockah.shocky.Shocky;
import pl.shockah.shocky.Utils;
import pl.shockah.shocky.cmds.Command;
import pl.shockah.shocky.cmds.CommandCallback;
import pl.shockah.shocky.cmds.Command.EType;
import pl.shockah.shocky.lines.LineMessage;
public class ModuleTell extends Module {
public final HashMap<String,ArrayList<LineMessage>> tells = new HashMap<String,ArrayList<LineMessage>>();
protected Command cmd;
public String name() {return "tell";}
public boolean isListener() {return true;}
public void onEnable() {
Command.addCommands(this, cmd = new CmdTell());
ArrayList<String> lines = FileLine.read(new File("data","tell.cfg"));
for (int i = 0; i < lines.size(); i += 4) addTell(lines.get(i),new LineMessage(Long.parseLong(lines.get(i+2)),"",lines.get(i+1),lines.get(i+3)));
}
public void onDisable() {
Command.removeCommands(cmd);
}
public void onDataSave() {
ArrayList<String> lines = new ArrayList<String>();
Iterator<Entry<String,ArrayList<LineMessage>>> it = tells.entrySet().iterator();
while (it.hasNext()) {
Entry<String,ArrayList<LineMessage>> pair = it.next();
for (LineMessage l : pair.getValue()) {
lines.add(pair.getKey());
lines.add(l.sender);
lines.add(""+l.time.getTime());
lines.add(l.text);
}
}
FileLine.write(new File("data","tell.cfg"),lines);
}
public void onMessage(MessageEvent<PircBotX> event) {
String[] args = event.getMessage().split(" ");
if (args.length>0&&args[0].length()>0&&!Command.matches(cmd,event.getBot(),EType.Channel,event.getChannel().getName(),args[0]))
sendTells(event.getBot(),event.getUser());}
public void onPrivateMessage(PrivateMessageEvent<PircBotX> event) {if (!Command.matches(cmd,event.getBot(),EType.Private,null,event.getMessage().split(" ")[0])) sendTells(event.getBot(),event.getUser());}
public void onNotice(NoticeEvent<PircBotX> event) {if (!Command.matches(cmd,event.getBot(),EType.Notice,null,event.getMessage().split(" ")[0])) sendTells(event.getBot(),event.getUser());}
public void onAction(ActionEvent<PircBotX> event) {sendTells(event.getBot(),event.getUser());}
public void onTopic(TopicEvent<PircBotX> event) {if (event.isChanged()) sendTells(event.getBot(),event.getUser());}
public void onKick(KickEvent<PircBotX> event) {sendTells(event.getBot(),event.getSource());}
public void onMode(ModeEvent<PircBotX> event) {sendTells(event.getBot(),event.getUser());}
public void onUserMode(UserModeEvent<PircBotX> event) {sendTells(event.getBot(),event.getSource());}
public void sendTells(PircBotX bot, User user) {
String unick = user.getNick().toLowerCase();
if (!tells.containsKey(unick)) return;
ArrayList<LineMessage> lines = tells.get(unick);
tells.remove(unick);
for (LineMessage line : lines) Shocky.sendNotice(bot,user,line.sender+" said "+Utils.timeAgo(line.time)+": "+line.text);
}
public synchronized void addTell(String user, LineMessage line) {
if (user.startsWith("#")) return;
user = user.toLowerCase();
if (!tells.containsKey(user)) tells.put(user,new ArrayList<LineMessage>());
tells.get(user).add(line);
}
public class CmdTell extends Command {
public String command() {return "tell";}
public String help(PircBotX bot, EType type, Channel channel, User sender) {
return "tell {user} {message} - relay the message to user";
}
public void doCommand(PircBotX bot, EType type, CommandCallback callback, Channel channel, User sender, String message) {
String[] args = message.split(" ");
callback.type = EType.Notice;
if (args.length >= 3) {
addTell(args[1],new LineMessage("",sender.getNick(),StringTools.implode(args,2," ")));
callback.append("I'll pass that along");
return;
}
callback.append(help(bot,type,channel,sender));
}
}
}