]> git.lizzy.rs Git - luairc.git/blob - test/test.lua
eb40efaa65b94e25539ae852039ae3ecac89d30b
[luairc.git] / test / test.lua
1 #!/usr/bin/lua
2
3 --[[
4 --Implemented callbacks:
5 --  on_nick_change(user, old_nick)
6 --  on_join(chan, user)
7 --  on_part(chan, user, part_msg)
8 --  on_op(chan, from_user, to_user)
9 --  on_deop(chan, from_user, to_user)
10 --  on_voice(chan, from_user, to_user)
11 --  on_devoice(chan, from_user, to_user)
12 --  on_topic_change(chan)
13 --  on_invite(from_user, chan)
14 --  on_kick(chan, from_user, to_user)
15 --  on_channel_msg(chan, from_user, msg)
16 --  on_private_msg(from_user, msg)
17 --  on_channel_notice(chan, from_user, msg)
18 --  on_private_notice(from_user, msg)
19 --  on_quit(user, quit_msg)
20 --  on_me_join(chan)
21 --  on_connect()
22 --  on_channel_act(chan, from_user, msg)
23 --  on_private_act(from_user, msg)
24 --  on_dcc(from_user, to_user, arg, address, port, size)
25 --  on_ctcp_error(from_user, to_user, msg)
26 --]]
27
28 --[[
29 --Implemented functions:
30 -- connect(args)
31 -- quit(msg)
32 -- join(chan)
33 -- part(chan)
34 -- say(to, msg)
35 -- notice(to, msg)
36 -- act(to, msg)
37 -- server_version(cb)
38 -- whois(cb, nick)
39 -- server_time(cb)
40 -- ctcp_ping(cb, nick)
41 -- ctcp_time(cb, nick)
42 -- ctcp_version(cb, nick)
43 -- send(command, ...)
44 -- get_ip()
45 -- channels()
46 --
47 -- chan:each_op()
48 -- chan:each_voice()
49 -- chan:each_user()
50 -- chan:each_member()
51 -- chan:ops()
52 -- chan:voices()
53 -- chan:users()
54 -- chan:members()
55 -- chan:ban(user)
56 -- chan:unban(user)
57 -- chan:voice(user)
58 -- chan:devoice(user)
59 -- chan:op(user)
60 -- chan:deop(user)
61 -- chan:set_limit(limit)
62 -- chan:set_key(key)
63 -- chan:set_private(b)
64 -- chan:set_secret(b)
65 -- chan:set_invite_only(b)
66 -- chan:set_topic_lock(b)
67 -- chan:set_no_outside_messages(b)
68 -- chan:set_moderated(b)
69 -- XXX: these should not be in the public interface... actually, this whole
70 -- handling needs to be rewritten
71 -- chan:add_user(user, mode)
72 -- chan:remove_user(user)
73 -- chan:change_status(user, b, mode)
74 -- chan:contains(user)
75 -- chan:change_nick(old_nick, new_nick
76 --
77 -- dcc.send(nick, filename, [port])
78 -- dcc.accept(filename, address, port, size, [packet_size])
79 --
80 -- debug.enable()
81 -- debug.disable()
82 -- debug.set_output(file)
83 -- debug.message(msg_type, msg, [color])
84 -- debug.err(msg)
85 -- debug.warn(msg)
86 --
87 -- XXX: do any of these need to be public?
88 -- misc.split(str, [delim], [end_delim], [lquotes], [rquotes])
89 -- misc.basename(path, [sep])
90 -- misc.dirname(path, [sep])
91 -- misc.str_to_int(str, [bytes], [endian])
92 -- misc.int_to_str(int, [endian])
93 -- misc.ip_str_to_int(ip_str)
94 -- misc.ip_int_to_str(ip_int)
95 -- misc.get_unique_filename(filename)
96 -- misc.try_call(fn, [...])
97 -- misc.try_call_warn(msg, fn, [...])
98 -- misc.parse_user(user)
99 -- misc.value_iter(state, arg, pred)
100 --]]
101
102 local irc = require "irc"
103 local dcc = require "irc.dcc"
104
105 irc.DEBUG = true
106
107 local function print_state()
108     for chan in irc.channels() do
109         print(chan..": Channel ops: "..table.concat(chan:ops(), " "))
110         print(chan..": Channel voices: "..table.concat(chan:voices(), " "))
111         print(chan..": Channel normal users: "..table.concat(chan:users(), " "))
112         print(chan..": All channel members: "..table.concat(chan:members(), " "))
113     end
114 end
115
116 function irc.on_connect()
117     print("Joining channel #doytest...")
118     irc.join("#doytest")
119     print("Joining channel #doytest2...")
120     irc.join("#doytest2")
121 end
122
123 function irc.on_me_join(chan)
124     print("Join to " .. chan .. " complete.")
125     print(chan .. ": Channel type: " .. chan.chanmode)
126     if chan.topic.text and chan.topic.text ~= "" then
127         print(chan .. ": Channel topic: " .. chan.topic.text)
128         print("  Set by " .. chan.topic.user ..
129               " at " .. os.date("%c", chan.topic.time))
130     end
131     irc.act(chan.name, "is here")
132     print_state()
133 end
134
135 function irc.on_join(chan, user)
136     print("I saw a join to " .. chan)
137     if tostring(user) ~= "doylua" then
138         irc.say(tostring(chan), "Hi, " .. user)
139     end
140     print_state()
141 end
142
143 function irc.on_part(chan, user, part_msg)
144     print("I saw a part from " .. chan .. " saying " .. part_msg)
145     print_state()
146 end
147
148 function irc.on_nick_change(new_nick, old_nick)
149     print("I saw a nick change: "  ..  old_nick .. " -> " .. new_nick)
150     print_state()
151 end
152
153 function irc.on_kick(chan, user)
154     print("I saw a kick in " .. chan)
155     print_state()
156 end
157
158 function irc.on_quit(chan, user)
159     print("I saw a quit from " .. chan)
160     print_state()
161 end
162
163 local function whois_cb(cb_data)
164     print("WHOIS data for " .. cb_data.nick)
165     if cb_data.user then print("Username: " .. cb_data.user) end
166     if cb_data.host then print("Host: " .. cb_data.host) end
167     if cb_data.realname then print("Realname: " .. cb_data.realname) end
168     if cb_data.server then print("Server: " .. cb_data.server) end
169     if cb_data.serverinfo then print("Serverinfo: " .. cb_data.serverinfo) end
170     if cb_data.away_msg then print("Awaymsg: " .. cb_data.away_msg) end
171     if cb_data.is_oper then print(nick .. "is an IRCop") end
172     if cb_data.idle_time then print("Idletime: " .. cb_data.idle_time) end
173     if cb_data.channels then
174         print("Channel list for " .. cb_data.nick .. ":")
175         for _, channel in ipairs(cb_data.channels) do print(channel) end
176     end
177 end
178
179 local function serverversion_cb(cb_data)
180     print("VERSION data for " .. cb_data.server)
181     print("Version: " .. cb_data.version)
182     print("Comments: " .. cb_data.comments)
183 end
184
185 local function ping_cb(cb_data)
186     print("CTCP PING for " .. cb_data.nick)
187     print("Roundtrip time: " .. cb_data.time .. "s")
188 end
189
190 local function time_cb(cb_data)
191     print("CTCP TIME for " .. cb_data.nick)
192     print("Localtime: " .. cb_data.time)
193 end
194
195 local function version_cb(cb_data)
196     print("CTCP VERSION for " .. cb_data.nick)
197     print("Version: " .. cb_data.version)
198 end
199
200 local function stime_cb(cb_data)
201     print("TIME for " .. cb_data.server)
202     print("Server time: " .. cb_data.time)
203 end
204
205 function irc.on_channel_msg(chan, from, msg)
206     if from == "doy" then
207         if msg == "leave" then
208             irc.part(chan.name)
209             return
210         elseif msg:sub(1, 3) == "op " then
211             chan:op(msg:sub(4))
212             return
213         elseif msg:sub(1, 5) == "deop " then
214             chan:deop(msg:sub(6))
215             return
216         elseif msg:sub(1, 6) == "voice " then
217             chan:voice(msg:sub(7))
218             return
219         elseif msg:sub(1, 8) == "devoice " then
220             chan:devoice(msg:sub(9))
221             return
222         elseif msg:sub(1, 5) == "kick " then
223             chan:kick(msg:sub(6))
224             return
225         elseif msg:sub(1, 5) == "send " then
226             dcc.send(from, msg:sub(6))
227             return
228         elseif msg:sub(1, 6) == "whois " then
229             irc.whois(whois_cb, msg:sub(7))
230             return
231         elseif msg:sub(1, 8) == "sversion" then
232             irc.server_version(serverversion_cb)
233             return
234         elseif msg:sub(1, 5) == "ping " then
235             irc.ctcp_ping(ping_cb, msg:sub(6))
236             return
237         elseif msg:sub(1, 5) == "time " then
238             irc.ctcp_time(time_cb, msg:sub(6))
239             return
240         elseif msg:sub(1, 8) == "version " then
241             irc.ctcp_version(version_cb, msg:sub(9))
242             return
243         elseif msg:sub(1, 5) == "stime" then
244             irc.server_time(stime_cb)
245             return
246         elseif msg:sub(1, 6) == "trace " then
247             irc.trace(trace_cb, msg:sub(7))
248             return
249         elseif msg:sub(1, 5) == "trace" then
250             irc.trace(trace_cb)
251             return
252         end
253     end
254     if from ~= "doylua" then
255         irc.say(chan.name, from .. ": " .. msg)
256     end
257 end
258
259 function irc.on_private_msg(from, msg)
260     if from == "doy" then
261         if msg == "leave" then
262             irc.quit("gone")
263             return
264         elseif msg:sub(1, 5) == "send " then
265             dcc.send(from, msg:sub(6))
266             return
267         end
268     end
269     if from ~= "doylua" then
270         irc.say(from, msg)
271     end
272 end
273
274 function irc.on_channel_act(chan, from, msg)
275     irc.act(chan.name, "jumps on " .. from)
276 end
277
278 function irc.on_private_act(from, msg)
279     irc.act(from, "jumps on you")
280 end
281
282 function irc.on_op(chan, from, nick)
283     print_state()
284 end
285
286 function irc.on_deop(chan, from, nick)
287     print_state()
288 end
289
290 function irc.on_voice(chan, from, nick)
291     print_state()
292 end
293
294 function irc.on_devoice(chan, from, nick)
295     print_state()
296 end
297
298 function irc.on_dcc()
299     return true
300 end
301
302 irc.connect{network = "irc.freenode.net", nick = "doylua", pass = "doylua"}