summaryrefslogtreecommitdiff
path: root/bot.erl
blob: bfc3598a8998876b2b8a521f104022e9aa9e2814 (plain)
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
-module(bot).
-export([connect/0]).
-compile(export_all).

-include("botsettings.erl").

logger(Log) ->
	receive
		{write, Term} ->
			io:fwrite(Log, "~p: ~p~n", [erlang:localtime(), Term]),
			logger(Log)
	end.

connect() ->
        {ok, Sock} = gen_tcp:connect(?server, ?port, [{packet, line}]),
	{ok, IoDevice} = file:open(?logfile, [append]),
	register(logp, spawn(fun() -> logger(IoDevice) end)),
        gen_tcp:send(Sock, "NICK " ++ ?nickname ++ "\r\n"),
        gen_tcp:send(Sock, "USER " ++ ?nickname ++ " blah blah :I am SamBot! &help me for more information.\r\n"),
%	irc_send(Sock, "nickserv", "identify lblhack"),
	receive after 5000 -> ok end,
        loop(Sock).

loop(Sock) ->
        receive
                {tcp, Sock, Data} ->
			logp ! {write, Data},
                        parse_line(Sock, string:tokens(Data, ": \r\n")),
                        loop(Sock)
        end.

irc_mode(Sock, Channel, Mode, User) ->
        S = "MODE " ++ Channel ++ " " ++ Mode ++ " " ++ User ++ "\r\n",
        gen_tcp:send(Sock, S),
	logp ! {write, S}.

irc_send(Sock, To, Message) ->
	Msgs = chop(Message, 0, [], []),
	send_msgs(Sock, To, Msgs).
send_msgs(_, _, []) -> ok;
send_msgs(Sock, To, [H|T]) ->
        S = "PRIVMSG " ++ To ++ " :" ++ H ++ "\r\n",
        gen_tcp:send(Sock, S),
	logp ! {write, S},
	send_msgs(Sock, To, T).

irc_gen(Sock, Type, To, Message) ->
	S = Type ++ " " ++ To ++ " :" ++ Message ++ "\r\n",
        gen_tcp:send(Sock, S),
	logp ! {write, S}.

chop([], _, A, R) -> R ++ [A];
chop([$ |T], 220, A, R) -> chop(T, 0, [], R ++ [A]);
chop([H|T], 220, A, R) -> chop(T, 220, A ++ [H], R);
chop([H|T], N, A, R) -> chop(T, N+1, A ++ [H], R).

-include("botutils.erl").
-include("botparse.erl").