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

向XMPP/Jabber会议室发送消息的简单方法?(Shell或Python,Debian喘息),python,xmpp,send,command-line-interface,conference,Python,Xmpp,Send,Command Line Interface,Conference,向XMPP/Jabber会议室发送消息的简单方法是什么?要么在命令行(Shell)上,要么使用Python?理想情况下,所有命令和/或库都应该在Debian wheezy(或jessie)中可用,而不必首先使用pip。 apt-get install python-pyxmpp 然后,像这样的事情 from pyxmpp.all import JID,Iq,Presence,Message,StreamError from pyxmpp.jabber.muc import MucRoomSta

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

apt-get install python-pyxmpp
然后,像这样的事情

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!")

我从一些旧代码中拆掉了它,现在我没有办法测试它,但这应该是一个很好的起点。请随意改进它

我在让python pyxmpp工作时遇到了一些问题,也许我只是太不耐烦了。不管怎样,我找到了另一个解决方案,对我来说很有效,但是在他们的网站上使用了sleekxmpp。这个解决方案并不比goncalopps更好(我希望也不比goncalopps更糟),只是我更快地解决了Debian哮喘病

$ sudo apt-get install python-sleekxmpp
下面是代码:

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"
导入optpass
导入系统
导入时间
导入sleekxmpp
类MUCBot(sleekxmpp.ClientXMPP):
定义初始化(self、jid、密码、房间、nick、消息):
sleekxmpp.ClientXMPP.\uuuu init\uuuu(self,jid,password)
房间
self.nick=nick
添加事件处理程序(“会话启动”,self.start)
self.message=消息
def启动(自身、事件):
self.get花名册()
self.sendPresence()
self.plugin['xep_0045'].joinMUC(self.room,self.nick,wait=True)
self.send_message(mto=self.room,mbody=self.message,mtype='groupchat')
时间。睡眠(10)
self.disconnect()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
op=optparse.OptionParser(用法=“%prog[options]您的消息文本”)
op.add_选项(“-j”,“--jid”,help=“jid to use”)
op.add_选项(“-n”,“--nick”,help=“MUC昵称”)
op.add_选项(“-p”,“--password”,help=“使用密码”)
op.add_选项(“-r”,“--room”,help=“MUC room to join”)
opts,args=op.parse_args()
如果[opts.jid、opts.nick、opts.password、opts.room]中没有\
或len(args)<1:
op.打印帮助()
系统出口(1)
xmpp=MUCBot(opts.jid、opts.password、opts.room、opts.nick、,
“.join(args))
xmpp.register_插件('xep_0030')#服务发现
xmpp.register_插件('xep_0045')#多用户聊天
注册插件('xep_0199')#xmpp Ping
如果xmpp.connect():
xmpp.process(threaded=False)
其他:
打印“connect()失败”
不确定是否真的需要
xep_0199
的插件

您可以使用Gajims遥控器执行该任务。您可以在顶部选择OMEMO Encrpyton

首先在首选项->高级->高级配置编辑器中激活Gajim中的远程控制。然后重新启动Gajim

现在您可以通过终端发送消息:

gajim-remote send_groupchat_message to@xmppserver.com 'Hello'
在python中,您可以使用子流程,例如:

from subprocess import call
call(gajim-remote send_groupchat_message to@xmppserver.com 'Hello', shell=True)

apt-get-install
ed
python-pyxmpp-python-xmpp
,但两者都
导入xmpp;执行(…)
导入pyxmpp;pyxmpp.execute(…)
raise
AttributeError:“module”对象没有属性“execute”
。我的坏主意,我显然有一个名为
xmpp
的模块-坏主意。我已经分解了更多的代码。翻阅一下,我注意到“jid”必须包括用户名+服务器(例如。myuser@myjabber.domain.com). 这个房间也需要某种域名吗?我在获取聊天信息时遇到问题。问题可能在别处,但澄清一下,您是否可以为参数添加示例值。