mirror of
https://github.com/processone/ejabberd
synced 2025-10-06 03:50:15 +02:00
* src/mod_irc/mod_irc_connection.erl: Support for topic changes
SVN Revision: 84
This commit is contained in:
parent
65fb70c11f
commit
d062175ffb
2 changed files with 84 additions and 19 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
2003-02-27 Alexey Shchepin <alexey@sevcom.net>
|
||||||
|
|
||||||
|
* src/mod_irc/mod_irc_connection.erl: Support for topic changes
|
||||||
|
|
||||||
2003-02-24 Alexey Shchepin <alexey@sevcom.net>
|
2003-02-24 Alexey Shchepin <alexey@sevcom.net>
|
||||||
|
|
||||||
* src/mod_irc/mod_irc_connection.erl: /kick support
|
* src/mod_irc/mod_irc_connection.erl: /kick support
|
||||||
|
|
|
@ -217,25 +217,38 @@ handle_info({route_chan, Channel, Resource,
|
||||||
NewStateData =
|
NewStateData =
|
||||||
case xml:get_attr_s("type", Attrs) of
|
case xml:get_attr_s("type", Attrs) of
|
||||||
"groupchat" ->
|
"groupchat" ->
|
||||||
ejabberd_router:route(
|
case xml:get_path_s(El, [{elem, "subject"}, cdata]) of
|
||||||
{lists:concat([Channel, "%", StateData#state.server]),
|
"" ->
|
||||||
StateData#state.myname, StateData#state.nick},
|
ejabberd_router:route(
|
||||||
StateData#state.user, El),
|
{lists:concat(
|
||||||
Body = xml:get_path_s(El, [{elem, "body"}, cdata]),
|
[Channel, "%", StateData#state.server]),
|
||||||
Body1 = case Body of
|
StateData#state.myname, StateData#state.nick},
|
||||||
[$/, $m, $e, $ | Rest] ->
|
StateData#state.user, El),
|
||||||
"\001ACTION " ++ Rest ++ "\001";
|
Body = xml:get_path_s(El, [{elem, "body"}, cdata]),
|
||||||
_ ->
|
Body1 = case Body of
|
||||||
Body
|
[$/, $m, $e, $ | Rest] ->
|
||||||
end,
|
"\001ACTION " ++ Rest ++ "\001";
|
||||||
Strings = string:tokens(Body1, "\n"),
|
_ ->
|
||||||
Res = lists:concat(
|
Body
|
||||||
lists:map(
|
end,
|
||||||
fun(S) ->
|
Strings = string:tokens(Body1, "\n"),
|
||||||
io_lib:format("PRIVMSG #~s :~s\r\n",
|
Res = lists:concat(
|
||||||
[Channel, S])
|
lists:map(
|
||||||
end, Strings)),
|
fun(S) ->
|
||||||
?SEND(Res);
|
io_lib:format("PRIVMSG #~s :~s\r\n",
|
||||||
|
[Channel, S])
|
||||||
|
end, Strings)),
|
||||||
|
?SEND(Res);
|
||||||
|
Subject ->
|
||||||
|
Strings = string:tokens(Subject, "\n"),
|
||||||
|
Res = lists:concat(
|
||||||
|
lists:map(
|
||||||
|
fun(S) ->
|
||||||
|
io_lib:format("TOPIC #~s :~s\r\n",
|
||||||
|
[Channel, S])
|
||||||
|
end, Strings)),
|
||||||
|
?SEND(Res)
|
||||||
|
end;
|
||||||
"chat" ->
|
"chat" ->
|
||||||
Body = xml:get_path_s(El, [{elem, "body"}, cdata]),
|
Body = xml:get_path_s(El, [{elem, "body"}, cdata]),
|
||||||
Body1 = case Body of
|
Body1 = case Body of
|
||||||
|
@ -321,6 +334,9 @@ handle_info({ircstring, [$: | String]}, StateName, StateData) ->
|
||||||
case Words of
|
case Words of
|
||||||
[_, "353" | Items] ->
|
[_, "353" | Items] ->
|
||||||
process_channel_list(StateData, Items);
|
process_channel_list(StateData, Items);
|
||||||
|
[_, "332", Nick, [$# | Chan] | _] ->
|
||||||
|
process_channel_topic(StateData, Chan, String),
|
||||||
|
StateData;
|
||||||
[From, "PRIVMSG", [$# | Chan] | _] ->
|
[From, "PRIVMSG", [$# | Chan] | _] ->
|
||||||
process_chanprivmsg(StateData, Chan, From, String),
|
process_chanprivmsg(StateData, Chan, From, String),
|
||||||
StateData;
|
StateData;
|
||||||
|
@ -330,6 +346,9 @@ handle_info({ircstring, [$: | String]}, StateName, StateData) ->
|
||||||
[From, "PRIVMSG", Nick | _] ->
|
[From, "PRIVMSG", Nick | _] ->
|
||||||
process_privmsg(StateData, Nick, From, String),
|
process_privmsg(StateData, Nick, From, String),
|
||||||
StateData;
|
StateData;
|
||||||
|
[From, "TOPIC", [$# | Chan] | _] ->
|
||||||
|
process_topic(StateData, Chan, From, String),
|
||||||
|
StateData;
|
||||||
[From, "PART", [$# | Chan] | _] ->
|
[From, "PART", [$# | Chan] | _] ->
|
||||||
process_part(StateData, Chan, From, String);
|
process_part(StateData, Chan, From, String);
|
||||||
[From, "QUIT" | _] ->
|
[From, "QUIT" | _] ->
|
||||||
|
@ -530,6 +549,26 @@ process_channel_list_user(StateData, Chan, User) ->
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
||||||
|
process_channel_topic(StateData, Chan, String) ->
|
||||||
|
FromUser = "someone",
|
||||||
|
{ok, Msg, _} = regexp:sub(String, ".*332[^:]*:", ""),
|
||||||
|
Msg1 = lists:filter(
|
||||||
|
fun(C) ->
|
||||||
|
if (C < 32) and
|
||||||
|
(C /= 9) and
|
||||||
|
(C /= 10) and
|
||||||
|
(C /= 13) ->
|
||||||
|
false;
|
||||||
|
true -> true
|
||||||
|
end
|
||||||
|
end, Msg),
|
||||||
|
ejabberd_router:route({lists:concat([Chan, "%", StateData#state.server]),
|
||||||
|
StateData#state.myname, FromUser},
|
||||||
|
StateData#state.user,
|
||||||
|
{xmlelement, "message", [{"type", "groupchat"}],
|
||||||
|
[{xmlelement, "subject", [], [{xmlcdata, Msg1}]}]}).
|
||||||
|
|
||||||
|
|
||||||
process_chanprivmsg(StateData, Chan, From, String) ->
|
process_chanprivmsg(StateData, Chan, From, String) ->
|
||||||
[FromUser | _] = string:tokens(From, "!"),
|
[FromUser | _] = string:tokens(From, "!"),
|
||||||
{ok, Msg, _} = regexp:sub(String, ".*PRIVMSG[^:]*:", ""),
|
{ok, Msg, _} = regexp:sub(String, ".*PRIVMSG[^:]*:", ""),
|
||||||
|
@ -595,6 +634,28 @@ process_version(StateData, Nick, From) ->
|
||||||
[FromUser])).
|
[FromUser])).
|
||||||
|
|
||||||
|
|
||||||
|
process_topic(StateData, Chan, From, String) ->
|
||||||
|
[FromUser | _] = string:tokens(From, "!"),
|
||||||
|
{ok, Msg, _} = regexp:sub(String, ".*TOPIC[^:]*:", ""),
|
||||||
|
Msg1 = lists:filter(
|
||||||
|
fun(C) ->
|
||||||
|
if (C < 32) and
|
||||||
|
(C /= 9) and
|
||||||
|
(C /= 10) and
|
||||||
|
(C /= 13) ->
|
||||||
|
false;
|
||||||
|
true -> true
|
||||||
|
end
|
||||||
|
end, Msg),
|
||||||
|
ejabberd_router:route({lists:concat([Chan, "%", StateData#state.server]),
|
||||||
|
StateData#state.myname, FromUser},
|
||||||
|
StateData#state.user,
|
||||||
|
{xmlelement, "message", [{"type", "groupchat"}],
|
||||||
|
[{xmlelement, "subject", [], [{xmlcdata, Msg1}]},
|
||||||
|
{xmlelement, "body", [],
|
||||||
|
[{xmlcdata, "/me has changed the subject to: " ++
|
||||||
|
Msg1}]}]}).
|
||||||
|
|
||||||
process_part(StateData, Chan, From, String) ->
|
process_part(StateData, Chan, From, String) ->
|
||||||
[FromUser | _] = string:tokens(From, "!"),
|
[FromUser | _] = string:tokens(From, "!"),
|
||||||
%Msg = lists:last(string:tokens(String, ":")),
|
%Msg = lists:last(string:tokens(String, ":")),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue