This commit is contained in:
Nicholas Chambers 2017-06-22 04:20:59 +00:00 committed by GitHub
commit 3679a9d454
3 changed files with 42 additions and 8 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
factoids.txt
std

View File

@ -3,6 +3,7 @@
HOST = "127.0.0.1".
PORT = 6667.
NICK = "lambot".
PASS = "YOUR_PASS_HERE".
LASTFM_API_KEY = "YOUR_LASTFM_API_KEY_HERE".
@ -10,4 +11,4 @@ LASTFM_API_KEY = "YOUR_LASTFM_API_KEY_HERE".
ADMINS = ["darkf"].
-- channels to join
CHANS = ["#lobby"].
CHANS = ["#lounge"].

View File

@ -1,6 +1,8 @@
import("std/base64").
import("std/list").
import("std/str").
import("std/http").
import("std/op").
import("config").
-- the lexical environment that $eval uses
@ -262,9 +264,31 @@ handleCommand(s, _, "251", _) -> s. -- There are X users and Y services on Z ser
handleCommand(s, _, "331", _) -> s. -- No topic is set
handleCommand(s, _, "366", _) -> s. -- End of NAMES list
handleCommand(s, _, "CAP", ["*", "ACK", "sasl "]) -> do
putstrln("Starting SASL handshake.");
fputstr(sock, "AUTHENTICATE PLAIN\r\n");
s
end.
handleCommand(s, _, "AUTHENTICATE", ["+"]) -> do
auth = base64\base64_encode(config\NICK + "\0" + config\NICK + "\0" + config\PASS);
fputstr(sock, "AUTHENTICATE " + auth + "\r\n");
s
end.
handleCommand(s, _, "903", _) -> do
putstrln("SASL authentication successful.");
fputstr(sock, "CAP END\r\n");
fputstr(sock, "NICK " + config\NICK + "\r\n");
fputstr(sock, "USER " + config\NICK + " 0 * :Lamb Da. Bot\r\n");
joinChans() -> list\map(\chan -> fputstr(sock, "JOIN " + chan + "\r\n"), config\CHANS);
joinChans();
s
end.
handleCommand(s, src, cmd, args) -> do
putstrln("Unhandled command: " + cmd + ", with args: " + repr(args) + " from " + src);
s
s
end.
handleLine(s, ":" :: line) -> do
@ -286,13 +310,20 @@ end.
sock = sockopen(config\HOST, config\PORT).
-- send introduction
fputstr(sock, "PASS " + config\NICK + "\r\n").
fputstr(sock, "NICK " + config\NICK + "\r\n").
fputstr(sock, "USER " + config\NICK + " 0 * :Lamb Da. Bot\r\n").
if config\PASS != "" then
if config\SASL == true then
fputstr(sock, "CAP REQ :sasl\r\n")
else
fputstr(sock, "PASS " + config\PASS + "\r\n")
else (,).
-- note: workaround for issue #19 (passing lambdas to modules in the global scope is incorrect)
joinChans() -> list\map(\chan -> fputstr(sock, "JOIN " + chan + "\r\n"), config\CHANS).
joinChans().
if config\SASL == false then do
fputstr(sock, "NICK " + config\NICK + "\r\n");
fputstr(sock, "USER " + config\NICK + " 0 * :Lamb Da. Bot\r\n");
joinChans() -> list\map(\chan -> fputstr(sock, "JOIN " + chan + "\r\n"), config\CHANS);
joinChans()
end
else (,).
-- loop receiving lines
mainloop(state) ->