[英]How to filter messages in Ejabberd
我让Ejabberd和测试用户一起运行,并且工作正常。 我想编写一个可以拦截消息并修改它们的模块,如下所示:
ejabberd文档很薄弱,教程也不存在。 你能给我一些这样做的示例代码吗? 然后我可以想出如何根据我的需要配置它。
谢谢捆绑!
阿迪尔
以下是此类模块的基本示例:
-module(packet_interceptor).
-behaviour(gen_mod).
-export([start/2,
stop/1]).
-export([on_filter_packet/1]).
start(Host, _Opts) ->
ejabberd_hooks:add(filter_packet, global, ?MODULE, on_filter_packet, 0).
on_filter_packet({From, To, XML} = Packet) ->
%% does something with a packet
%% should return modified Packet or atom `drop` to drop the packet
Packet.
并确保将此模块添加到ejabberd的配置module
部分:
{modules,
[...
...
...
{packet_interceptor, []}
]}.
只需按照您想要的方式扩展on_filter_packet/1
并返回适当修改的数据包。
gleber的例子很棒。 我还写了一个更复杂的数据包操作示例,我为Chesspark构建了一个名为mod_sunshine的数据包操作。
如何将此XML数据发送到php(通过?xml =)并检索生成的XML,然后将其传递给收件人?
如果您有使用exmpp的最新版本的ejabberd,则可以使用exmpp_xml:node_to_binary / 1或exmpp_xml:node_to_list / 1将XML的内部表示形式分别转换为二进制或字符串。
旧的ejabberd中有类似命名的函数,但在xml模块中。
看来你想要做的就是创建一个XMPP服务器组件。 在该帖子上已经说了很多东西, 哪个XMPP服务器试验开发服务器组件 。
我可以链接一些有用的链接:
来自metajack.im的Python中的Echo-Bot ,一个来自XMPP大师的非常好的博客。 这个机器人听取任何消息节并回复其中的一些。
Gleber的解决方案实际上是“面向ejabberd”(当然,在您的情况下最简单),而这个解决方案可以与其他XMPP服务器一起扩展。
有接口:
ejabberd_router:register_route(MyHost)
这是我过去使用过的,效果很好。 一旦MyHost
注册到ejabberd,模块将通过info
消息接收通往MyHost
的通信(假设gen_server
)。
如@gleber所述,不要忘记将模块添加到配置文件中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.