首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >向XMPP/Jabber会议室发送消息的简单方法?(Shell或Python,Debian wheezy)

向XMPP/Jabber会议室发送消息的简单方法?(Shell或Python,Debian wheezy)
EN

Stack Overflow用户
提问于 2014-07-29 17:43:25
回答 2查看 2.2K关注 0票数 1

将消息发送到XMPP/Jabber会议室的简便方法是什么?是在命令行(Shell),还是使用Python?理想情况下,所有的命令和/或库都应该在Debian wheezy (或jessie)中可用,而不使用pip。

EN

回答 2

Stack Overflow用户

发布于 2014-07-30 01:24:28

我在让python-pyxmpp工作时遇到了一些问题,也许我只是有点不耐烦了。无论如何,我找到了另一个解决方案,这个方案对我很有效,但在他们的网站上使用了sleekxmpp。这个解决方案并不比goncalopps更好(我希望也不会更糟),只是我在Debian wheezy上运行得更快。

代码语言:javascript
运行
复制
$ sudo apt-get install python-sleekxmpp

下面是代码:

代码语言:javascript
运行
复制
import optparse
import sys
import time

import sleekxmpp


class MUCBot(sleekxmpp.ClientXMPP):
    def __init__(self, jid, password, room, nick, message):
        sleekxmpp.ClientXMPP.__init__(self, jid, password)
        self.room = room
        self.nick = nick
        self.add_event_handler("session_start", self.start)
        self.message = message

    def start(self, event):
        self.getRoster()
        self.sendPresence()
        self.plugin['xep_0045'].joinMUC(self.room, self.nick, wait=True)
        self.send_message(mto=self.room, mbody=self.message, mtype='groupchat')
        time.sleep(10)
        self.disconnect()


if __name__ == '__main__':
    op = optparse.OptionParser(usage='%prog [options] your message text')
    op.add_option("-j", "--jid", help="JID to use")
    op.add_option("-n", "--nick", help="MUC nickname")
    op.add_option("-p", "--password", help="password to use")
    op.add_option("-r", "--room", help="MUC room to join")
    opts, args = op.parse_args()

    if None in [opts.jid, opts.nick, opts.password, opts.room] \
       or len(args) < 1:
        op.print_help()
        sys.exit(1)

    xmpp = MUCBot(opts.jid, opts.password, opts.room, opts.nick,
                  " ".join(args))
    xmpp.register_plugin('xep_0030')  # Service Discovery
    xmpp.register_plugin('xep_0045')  # Multi-User Chat
    xmpp.register_plugin('xep_0199')  # XMPP Ping

    if xmpp.connect():
        xmpp.process(threaded=False)
    else:
        print "connect() failed"

不确定是否真的需要xep_0199的插件。

票数 2
EN

Stack Overflow用户

发布于 2014-07-29 18:15:32

第一

代码语言:javascript
运行
复制
apt-get install python-pyxmpp

然后,像这样的东西

代码语言:javascript
运行
复制
from pyxmpp.all import JID,Iq,Presence,Message,StreamError
from pyxmpp.jabber.muc import MucRoomState, MucRoomManager, MucRoomHandler
from pyxmpp.jabber.client import JabberClient
from pyxmpp.interface import implements
from pyxmpp.interfaces import *
from pyxmpp.streamtls import TLSSettings

def execute(user, password, tls_option, message_handler, idle_function, delay=1):
    global client, roomManager
    tls_settings= TLSSettings(require = True, verify_peer = (tls_option!='tls_no_verify'))
    client= Client(JID(user), password, tls_settings)
    client.connect()

    EchoHandler.message= message_handler
    roomManager = MucRoomManager(client.stream);
    roomManager.set_handlers()


def joinMUC( handler, room_jid, nick, password= None):
    global roomManager
    handler.password= password
    roomState = roomManager.join( room=JID(room_jid), nick=nick, handler=handler, history_maxchars=0, password= password )
    return roomState

from pyxmpp.jabber.muc import MucRoomHandler
roomManager= None
execute(username, password, 'tls_no_verify', process_message_callback, periodic_callback)
state= joinMUC( room_handler, "conferencename@mydomain.tld", user, passwd)
state.send_message("something spammy!")

我从我放在那里的一些旧代码中窃取了这一点,现在我没有办法对其进行测试,但这应该是一个很好的起点。请随意改进它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25012370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档