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").
|