ejabberd聊天室离线消息
2024-08-25 23:46:28
首先,xmpp服务器是基于ejabberd。离线消息模块是mod_interact,原地址地址:https://github.com /adamvduke/mod_interact; 修改后实现群聊离线消息:https://github.com/Joywok/mod_interact
不仅仅要修改这一个文件,还涉及到ehabberd_sm、mod_muc_room、mod_offline三个模块的修改。
以上三个文件仅仅只需要屏蔽或者修改几行代码就能实现了,很简单的。
ehabberd_sm屏蔽以下两行代码:
1
2
|
<< "groupchat" >> -> bounce_offline_message(From, To, Packet); |
mod_offline:
将下面一行代码修改
1
|
if (Type /= << "error" >>) and (Type /= << "groupchat" >>) |
修改后的:
1
|
if (Type /= << "error" >>) |
mod_muc_room这个模块多要修改几行,muc只是给在线的用户发送消息,那么不在线的用户就收不到了,所以在发送消息那块把发送在线的用户修改为muc的成员就ok了。
把以下一个遍历代码修改:
1
2
3
4
5
6
7
8
9
|
lists:foreach( fun({_LJID, Info}) -> ejabberd_router:route( jlib:jid_replace_resource( StateData#state.jid, FromNick), Info#user.jid, Packet) end,?DICT:to_list(StateData#state.users)), |
修改后的代码:
1
2
3
4
5
6
7
8
9
10
11
12
|
lists:foreach( fun(Info) -> {Jid,_} = Info, {Email,Server,Source}=Jid, To={ 'jid' ,Email,Server,Source,Email,Server,Source}, ejabberd_router:route( jlib:jid_replace_resource( StateData#state.jid, FromNick), To, Packet) end,?DICT:to_list(StateData#state.affiliations)), |
重新编译模块,替换原来的模块,重启ejabberd服务器就ok了。
按照这个就能简单的实现群聊离线消息了。
最新文章
- js event 事件冒泡和事件捕获详细介绍
- SQL Server去掉字段内的双引号
- HDU 4704 Sum (高精度+快速幂+费马小定理+二项式定理)
- html select 下拉箭头隐藏
- JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
- div+css的兼容性问题和解决方法
- DUILIB创建不规则窗体,自定义控件(很不错的几十篇文章)
- Android Studio:You need to use a Theme.AppCompat theme (or descendant) with this activity. AlertDialog
- Walking Ant(bfs)
- linux下 mysql 学习(一)
- JVM学习九:JVM之GC算法和种类
- 决策树之ID3、C4.5
- [Vue] karme/jasmine/webpack/vue搭建测试环境
- Linux服务器查看外网IP地址的命令
- UVA - 1625 Color Length[序列DP 提前计算代价]
- springboot1.5.4 log4j
- word2010自定义的多级列表编号变成黑块的解决办法
- [LeetCode&;Python] Problem 661. Image Smoother
- Linux 文件系统介绍
- Xcode 在读写上提速100倍