Uses 75K of libraries. Compilation Failed (4974L/33K).
1 | !752 |
2 | !1002672 // pircbot library |
3 | |
4 | import org.jibble.pircbot.*; |
5 | |
6 | !include #1002680 // modified PircBot |
7 | |
8 | static boolean useBouncer = true; |
9 | |
10 | static S server = useBouncer ? "second.tinybrain.de" : "irc.freenode.net"; |
11 | static S channel = /*"##linux"*/"#pircbot"; |
12 | static S name = "Lookie"; |
13 | static int reconnectTimeout1 = 60; // seconds after which to send a ping to server |
14 | static int reconnectTimeout2 = 80; // seconds after which we try to reconnect |
15 | |
16 | static Map<S, PersistentLog<Map>> bulk = new TreeMap; // key = channel (with "#") |
17 | |
18 | static MyBot bot; |
19 | |
20 | p {
|
21 | thread "IRC Log-In" {
|
22 | bot = new MyBot; |
23 | bot.setVerbose(true); |
24 | print("PircBot connecting to " + server);
|
25 | bot.connect(server); |
26 | print("PircBot connect issued");
|
27 | |
28 | autoReconnect(bot); |
29 | } |
30 | } |
31 | |
32 | static class MyBot extends PircBot {
|
33 | long lastReceived; |
34 | |
35 | MyBot() {
|
36 | setName(name); |
37 | //setRealName(name); // newer version of PircBot only |
38 | setLogin(name); |
39 | setVersion(name); |
40 | setFinger("");
|
41 | setAutoNickChange(true); |
42 | } |
43 | |
44 | public void handleLine(String line) {
|
45 | getLog(channel).add(litmap("time", smartNow(), "line", line));
|
46 | super.handleLine(line); |
47 | lastReceived = now(); |
48 | } |
49 | |
50 | public void onConnect() {
|
51 | print("PircBot onConnect useBouncer=" + useBouncer);
|
52 | if (useBouncer) {
|
53 | S bouncerLogin = loadSecretTextFileMandatory("bouncer-login").trim();
|
54 | print("Logging in to bouncer");
|
55 | bot.sendMessage("root", bouncerLogin.trim());
|
56 | |
57 | // session should already be there, so resume it |
58 | print("Resuming bouncer session");
|
59 | bot.sendMessage("root", "connect freenode");
|
60 | } |
61 | |
62 | bot.joinChannel(channel); |
63 | } |
64 | } |
65 | |
66 | static void autoReconnect(final MyBot bot) {
|
67 | thread "PircBot Auto-Reconnect" {
|
68 | while (licensed()) {
|
69 | sleepSeconds(10); |
70 | |
71 | if (now() >= bot.lastReceived + reconnectTimeout2*1000) |
72 | try {
|
73 | print("PircBot: Trying to reconnect...");
|
74 | hardClose(bot); |
75 | |
76 | sleepSeconds(1); // allow for input thread to halt |
77 | |
78 | bot.reconnect(); |
79 | } catch (Exception e) {
|
80 | print("Reconnect fail: " + e);
|
81 | // Couldn't reconnect! |
82 | } |
83 | else if (now() >= bot.lastReceived + reconnectTimeout1*1000) |
84 | bot.sendRawLine("TIME"); // send something
|
85 | } |
86 | } |
87 | } |
88 | |
89 | static Socket getSocket(PircBot bot) {
|
90 | ret (Socket) get(get(bot, "_inputThread"), "_socket"); |
91 | } |
92 | |
93 | answer {
|
94 | if "irc log size *" |
95 | exceptionToUser { ret lstr(getLog(m.unq(0))); }
|
96 | } |
97 | |
98 | static synchronized PersistentLog<Map> getLog(S channelName) {
|
99 | checkChannelName(channelName); |
100 | PersistentLog log = bulk.get(channelName); |
101 | if (log == null) |
102 | bulk.put(channelName, log = new PersistentLog(channelName + ".log")); |
103 | ret log; |
104 | } |
105 | |
106 | static S checkChannelName(S s) {
|
107 | assertTrue(nempty(s)); |
108 | for (int i = 0; i < l(s); i++) |
109 | if (!( |
110 | "#!".indexOf(s.charAt(i)) >= 0 || Character.isLetterOrDigit(s.charAt(i)))) |
111 | fail(s); |
112 | ret s; |
113 | } |
114 | |
115 | static void hardClose(PircBot bot) {
|
116 | if (bot == null) ret; |
117 | |
118 | try {
|
119 | //bot.disconnect(); |
120 | getSocket(bot).close(); |
121 | } |
122 | catch (Exception e) { print(str(e)); }
|
123 | } |
124 | |
125 | static void cleanMeUp() {
|
126 | hardClose(bot); |
127 | } |
128 | |
129 | static long smartNow_last; |
130 | |
131 | static long smartNow() {
|
132 | ret smartNow_last = max(smartNow_last + 1, now()); |
133 | } |
Began life as a copy of #1002677
download show line numbers debug dex old transpilations
Travelled to 13 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
| Snippet ID: | #1002681 |
| Snippet name: | IRC Log Bot (working on bouncer) |
| Eternal ID of this version: | #1002681/1 |
| Text MD5: | 173de7540cadc7c59263f40ddf073087 |
| Transpilation MD5: | c9a5cf3890a1d74f79be96295782b00e |
| Author: | stefan |
| Category: | javax |
| Type: | JavaX source code |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2016-02-13 02:51:52 |
| Source code size: | 3407 bytes / 133 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 832 / 919 |
| Referenced in: | [show references] |