⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mod_irc_connection.erl

📁 ejabberd-0.7.5 分布式Jabber服务器
💻 ERL
📖 第 1 页 / 共 3 页
字号:
	     end, Msg1),    ejabberd_router:route(      jlib:make_jid(lists:concat([FromUser, "!", StateData#state.server]),		    StateData#state.myname, ""),      StateData#state.user,      {xmlelement, "message", [{"type", "chat"}],       [{xmlelement, "body", [], [{xmlcdata, Msg2}]}]}).process_notice(StateData, Nick, From, String) ->    [FromUser | _] = string:tokens(From, "!"),    {ok, Msg, _} = regexp:sub(String, ".*NOTICE[^:]*:", ""),    Msg1 = case Msg of	       [1, $A, $C, $T, $I, $O, $N, $  | Rest] ->		   "/me " ++ Rest;	       _ ->		   Msg	   end,    Msg2 = lists:filter(	     fun(C) ->		     if (C < 32) and			(C /= 9) and			(C /= 10) and			(C /= 13) ->			     false;			true -> true		     end	     end, Msg1),    ejabberd_router:route(      jlib:make_jid(lists:concat([FromUser, "!", StateData#state.server]),		    StateData#state.myname, ""),      StateData#state.user,      {xmlelement, "message", [{"type", "chat"}],       [{xmlelement, "body", [], [{xmlcdata, "NOTICE: " ++ Msg2}]}]}).process_version(StateData, Nick, From) ->    [FromUser | _] = string:tokens(From, "!"),    send_text(      StateData,      io_lib:format("NOTICE ~s :\001VERSION "		    "ejabberd IRC transport ~s (c) Alexey Shchepin"		    "\001\r\n",		    [FromUser, ?VERSION]) ++      io_lib:format("NOTICE ~s :\001VERSION "		    "http://ejabberd.jabberstudio.org/"		    "\001\r\n",		    [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(      jlib:make_jid(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) ->    [FromUser | FromIdent] = string:tokens(From, "!"),    {ok, Msg, _} = regexp:sub(String, ".*PART[^:]*", ""),        ejabberd_router:route(      jlib:make_jid(lists:concat([Chan, "%", StateData#state.server]),		    StateData#state.myname, FromUser),      StateData#state.user,      {xmlelement, "message", [{"type", "groupchat"}],       [{xmlelement, "body", [],	 [{xmlcdata, "/me has part: " ++	   Msg ++ "("  ++ FromIdent ++ ")" }]}]}),    ejabberd_router:route(      jlib:make_jid(lists:concat([Chan, "%", StateData#state.server]),		    StateData#state.myname, FromUser),      StateData#state.user,      {xmlelement, "presence", [{"type", "unavailable"}],       [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}],	 [{xmlelement, "item",	   [{"affiliation", "member"},	    {"role", "none"}],	   []}]},	{xmlelement, "status", [],	 [{xmlcdata, Msg ++ "("  ++ FromIdent ++ ")"}]}]      }),    case catch dict:update(Chan,			   fun(Ps) ->				   remove_element(FromUser, Ps)			   end, StateData#state.channels) of	{'EXIT', _} ->	    StateData;	NS ->	    StateData#state{channels = NS}    end.process_quit(StateData, From, String) ->    [FromUser | FromIdent] = string:tokens(From, "!"),        {ok, Msg, _} = regexp:sub(String, ".*QUIT[^:]*:", ""),    NewChans =	dict:map(	  fun(Chan, Ps) ->		  case ?SETS:is_member(FromUser, Ps) of		      true ->		          ejabberd_router:route(			    jlib:make_jid(			      lists:concat([Chan, "%", StateData#state.server]),			      StateData#state.myname, FromUser),			    StateData#state.user,			    {xmlelement, "message", [{"type", "groupchat"}],			     [{xmlelement, "body", [],			       [{xmlcdata, "/me has quit: " ++				 Msg ++ "("  ++ FromIdent ++ ")" }]}]}),			  ejabberd_router:route(			    jlib:make_jid(			      lists:concat([Chan, "%", StateData#state.server]),			      StateData#state.myname, FromUser),			    StateData#state.user,			    {xmlelement, "presence", [{"type", "unavailable"}],			     [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}],			       [{xmlelement, "item",				 [{"affiliation", "member"},				  {"role", "none"}],				 []}]},			      {xmlelement, "status", [],			       [{xmlcdata, Msg ++ "("  ++ FromIdent ++ ")"}]}			     ]}),			  remove_element(FromUser, Ps);		      _ ->			  Ps		  end	  end, StateData#state.channels),    StateData.process_join(StateData, Channel, From, String) ->    [FromUser | FromIdent] = string:tokens(From, "!"),    Chan = lists:subtract(Channel, ":#"),    ejabberd_router:route(      jlib:make_jid(lists:concat([Chan, "%", StateData#state.server]),		    StateData#state.myname, FromUser),      StateData#state.user,      {xmlelement, "presence", [],       [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}],	 [{xmlelement, "item",	   [{"affiliation", "member"},	    {"role", "participant"}],	   []}]},	{xmlelement, "status", [],	 [{xmlcdata, FromIdent}]}]}),    {ok, Msg, _} = regexp:sub(String, ".*JOIN[^:]*:", ""),        ejabberd_router:route(      jlib:make_jid(lists:concat([Chan, "%", StateData#state.server]),		    StateData#state.myname, FromUser),      StateData#state.user,      {xmlelement, "message", [{"type", "groupchat"}],       [{xmlelement, "body", [],	 [{xmlcdata, "/me has joined " ++	   Msg ++ "("  ++ FromIdent ++ ")" }]}]}),    case catch dict:update(Chan,			   fun(Ps) ->				   ?SETS:add_element(FromUser, Ps)			   end, StateData#state.channels) of	{'EXIT', _} ->	    StateData;	NS ->	    StateData#state{channels = NS}    end.process_mode_o(StateData, Chan, From, Nick, Affiliation, Role) ->    %Msg = lists:last(string:tokens(String, ":")),    ejabberd_router:route(      jlib:make_jid(lists:concat([Chan, "%", StateData#state.server]),		    StateData#state.myname, Nick),      StateData#state.user,      {xmlelement, "presence", [],       [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}],	 [{xmlelement, "item",	   [{"affiliation", Affiliation},	    {"role", Role}],	   []}]}]}).process_kick(StateData, Chan, From, Nick) ->    %Msg = lists:last(string:tokens(String, ":")),    ejabberd_router:route(      jlib:make_jid(lists:concat([Chan, "%", StateData#state.server]),		    StateData#state.myname, Nick),      StateData#state.user,      {xmlelement, "presence", [{"type", "unavailable"}],       [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}],	 [{xmlelement, "item",	   [{"affiliation", "none"},	    {"role", "none"}],	   []},	  {xmlelement, "status", [{"code", "307"}], []}	 ]}]}).process_nick(StateData, From, NewNick) ->    [FromUser | _] = string:tokens(From, "!"),    Nick = lists:subtract(NewNick, ":"),    NewChans =	dict:map(	  fun(Chan, Ps) ->		  case ?SETS:is_member(FromUser, Ps) of		      true ->			  ejabberd_router:route(			    jlib:make_jid(			      lists:concat([Chan, "%", StateData#state.server]),			      StateData#state.myname, FromUser),			    StateData#state.user,			    {xmlelement, "presence", [{"type", "unavailable"}],			     [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}],			       [{xmlelement, "item",				 [{"affiliation", "member"},				  {"role", "participant"},				  {"nick", Nick}],				 []},				{xmlelement, "status", [{"code", "303"}], []}			       ]}]}),			  ejabberd_router:route(			    jlib:make_jid(			      lists:concat([Chan, "%", StateData#state.server]),			      StateData#state.myname, Nick),			    StateData#state.user,			    {xmlelement, "presence", [],			     [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}],			       [{xmlelement, "item",				 [{"affiliation", "member"},				  {"role", "participant"}],				 []}			       ]}]}),			  ?SETS:add_element(Nick,					    remove_element(FromUser, Ps));		      _ ->			  Ps		  end	  end, StateData#state.channels),    StateData#state{channels = NewChans}.process_error(StateData, String) ->    lists:foreach(      fun(Chan) ->	      ejabberd_router:route(		jlib:make_jid(		  lists:concat([Chan, "%", StateData#state.server]),		  StateData#state.myname, StateData#state.nick),		StateData#state.user,		{xmlelement, "presence", [{"type", "error"}],		 [{xmlelement, "error", [{"code", "502"}],		   [{xmlcdata, String}]}]})      end, dict:fetch_keys(StateData#state.channels)).remove_element(E, Set) ->    case ?SETS:is_element(E, Set) of	true ->	    ?SETS:del_element(E, Set);	_ ->	    Set    end.iq_admin(StateData, Channel, From, To,	 #iq{type = Type, xmlns = XMLNS, sub_el = SubEl} = IQ) ->    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#iq{type = result,					  sub_el = [{xmlelement, "query",						     [{"xmlns", XMLNS}],						     ResEls						    }]};				{error, Error} ->				    IQ#iq{type = error,					  sub_el = [SubEl, Error]}			    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, ?ERR_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, ?ERR_FEATURE_NOT_IMPLEMENTED}.process_admin(StateData, Channel, "", Affiliation, Role, Reason) ->    {error, ?ERR_FEATURE_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, ?ERR_FEATURE_NOT_IMPLEMENTED}.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -