* src/mod_irc/mod_irc_connection.erl: /kick support
SVN Revision: 83
This commit is contained in:
parent
499a1117dc
commit
65fb70c11f
|
@ -1,3 +1,7 @@
|
||||||
|
2003-02-24 Alexey Shchepin <alexey@sevcom.net>
|
||||||
|
|
||||||
|
* src/mod_irc/mod_irc_connection.erl: /kick support
|
||||||
|
|
||||||
2003-02-23 Alexey Shchepin <alexey@sevcom.net>
|
2003-02-23 Alexey Shchepin <alexey@sevcom.net>
|
||||||
|
|
||||||
* src/mod_irc/: Added configuration interface
|
* src/mod_irc/: Added configuration interface
|
||||||
|
|
|
@ -257,6 +257,26 @@ handle_info({route_chan, Channel, Resource,
|
||||||
end,
|
end,
|
||||||
{next_state, StateName, NewStateData};
|
{next_state, StateName, NewStateData};
|
||||||
|
|
||||||
|
|
||||||
|
handle_info({route_chan, Channel, Resource,
|
||||||
|
{xmlelement, "iq", Attrs, Els} = El},
|
||||||
|
StateName, StateData) ->
|
||||||
|
From = StateData#state.user,
|
||||||
|
To = {lists:concat([Channel, "%", StateData#state.server]),
|
||||||
|
StateData#state.myname, StateData#state.nick},
|
||||||
|
case jlib:iq_query_info(El) of
|
||||||
|
{iq, ID, Type, ?NS_MUC_ADMIN = XMLNS, SubEl} ->
|
||||||
|
iq_admin(StateData, Channel,
|
||||||
|
From,
|
||||||
|
To,
|
||||||
|
ID, XMLNS, Type, SubEl);
|
||||||
|
_ ->
|
||||||
|
Err = jlib:make_error_reply(
|
||||||
|
El, "503", "Service Unavailable"),
|
||||||
|
ejabberd_router:route(To, From, Err)
|
||||||
|
end,
|
||||||
|
{next_state, StateName, StateData};
|
||||||
|
|
||||||
handle_info({route_chan, Channel, Resource, Packet}, StateName, StateData) ->
|
handle_info({route_chan, Channel, Resource, Packet}, StateName, StateData) ->
|
||||||
{next_state, StateName, StateData};
|
{next_state, StateName, StateData};
|
||||||
|
|
||||||
|
@ -737,3 +757,77 @@ remove_element(E, Set) ->
|
||||||
_ ->
|
_ ->
|
||||||
Set
|
Set
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
iq_admin(StateData, Channel, From, To, ID, XMLNS, Type, SubEl) ->
|
||||||
|
case catch process_iq_admin(StateData, Channel, Type, SubEl) of
|
||||||
|
{'EXIT', Reason} ->
|
||||||
|
?ERROR_MSG("~p", [Reason]);
|
||||||
|
Res ->
|
||||||
|
if
|
||||||
|
Res /= ignore ->
|
||||||
|
ResIQ = case Res of
|
||||||
|
{result, ResEls} ->
|
||||||
|
{iq, ID, result, XMLNS,
|
||||||
|
[{xmlelement, "query",
|
||||||
|
[{"xmlns", XMLNS}],
|
||||||
|
ResEls
|
||||||
|
}]};
|
||||||
|
{error, Code, Desc} ->
|
||||||
|
{iq, ID, error, XMLNS,
|
||||||
|
[SubEl, {xmlelement, "error",
|
||||||
|
[{"code", Code}],
|
||||||
|
[{xmlcdata, Desc}]}]}
|
||||||
|
end,
|
||||||
|
ejabberd_router:route(To, From,
|
||||||
|
jlib:iq_to_xml(ResIQ));
|
||||||
|
true ->
|
||||||
|
ok
|
||||||
|
end
|
||||||
|
end.
|
||||||
|
|
||||||
|
|
||||||
|
process_iq_admin(StateData, Channel, set, SubEl) ->
|
||||||
|
case xml:get_subtag(SubEl, "item") of
|
||||||
|
false ->
|
||||||
|
{error, "400", "Bad Request"};
|
||||||
|
ItemEl ->
|
||||||
|
Nick = xml:get_tag_attr_s("nick", ItemEl),
|
||||||
|
Affiliation = xml:get_tag_attr_s("affiliation", ItemEl),
|
||||||
|
Role = xml:get_tag_attr_s("role", ItemEl),
|
||||||
|
Reason = xml:get_path_s(ItemEl, [{elem, "reason"}, cdata]),
|
||||||
|
process_admin(StateData, Channel, Nick, Affiliation, Role, Reason)
|
||||||
|
end;
|
||||||
|
process_iq_admin(StateData, Channel, get, SubEl) ->
|
||||||
|
{error, "501", "Not Implemented"}.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
process_admin(StateData, Channel, "", Affiliation, Role, Reason) ->
|
||||||
|
{error, "501", "Not Implemented"};
|
||||||
|
|
||||||
|
process_admin(StateData, Channel, Nick, Affiliation, "none", Reason) ->
|
||||||
|
case Reason of
|
||||||
|
"" ->
|
||||||
|
send_text(StateData,
|
||||||
|
io_lib:format("KICK #~s ~s\r\n",
|
||||||
|
[Channel, Nick]));
|
||||||
|
_ ->
|
||||||
|
send_text(StateData,
|
||||||
|
io_lib:format("KICK #~s ~s :~s\r\n",
|
||||||
|
[Channel, Nick, Reason]))
|
||||||
|
end,
|
||||||
|
{result, []};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
process_admin(StateData, Channel, Nick, Affiliation, Role, Reason) ->
|
||||||
|
{error, "501", "Not Implemented"}.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -22,5 +22,7 @@
|
||||||
-define(NS_STATS, "http://jabber.org/protocol/stats").
|
-define(NS_STATS, "http://jabber.org/protocol/stats").
|
||||||
-define(NS_MUC, "http://jabber.org/protocol/muc").
|
-define(NS_MUC, "http://jabber.org/protocol/muc").
|
||||||
-define(NS_MUC_USER, "http://jabber.org/protocol/muc#user").
|
-define(NS_MUC_USER, "http://jabber.org/protocol/muc#user").
|
||||||
|
-define(NS_MUC_ADMIN, "http://jabber.org/protocol/muc#admin").
|
||||||
|
-define(NS_MUC_OWNER, "http://jabber.org/protocol/muc#owner").
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue