#!/usr/bin/env python3 # -*- coding: utf-8 -*- import sys import logging import getpass import subprocess from optparse import OptionParser import sleekxmpp if sys.version_info < (3, 0): reload(sys) sys.setdefaultencoding('utf8') else: raw_input = input class PBBot(sleekxmpp.ClientXMPP): def __init__(self, jid, password): sleekxmpp.ClientXMPP.__init__(self, jid, password) self.add_event_handler("session_start", self.start) self.add_event_handler("message", self.message) def start(self, event): self.send_presence() self.get_roster() def message(self, msg): if msg['type'] in ('chat', 'normal'): if "!paste" in msg['body']: arg = msg['body'].replace('!paste', '').strip() output = subprocess.check_output(['env', 'pbincli', \ 'send', '--text', arg]).decode('utf-8') msg.reply(output).send() elif "!bpaste" in msg['body']: arg = msg['body'].replace('!bpaste', '').strip() output = subprocess.check_output(['env', 'pbincli', \ 'send', '-B', '--text', arg]).decode('utf-8') msg.reply(output).send() elif "!get" in msg['body']: arg = msg['body'].replace('!get', '').strip() output = subprocess.check_output(['/bin/env', 'pbincli' \ 'get', arg]).decode('utf-8') msg.reply(output).send() elif "!echo" in msg['body']: arg = msg['body'].replace('!echo', '').strip() msg.reply("Thanks for sending\n" + arg).send() else: msg.reply("Commands (prefix with !): paste bpaste echo get").send() if __name__ == '__main__': # Setup the command line arguments. optp = OptionParser() # Output verbosity options. optp.add_option('-q', '--quiet', help='set logging to ERROR', action='store_const', dest='loglevel', const=logging.ERROR, default=logging.INFO) optp.add_option('-d', '--debug', help='set logging to DEBUG', action='store_const', dest='loglevel', const=logging.DEBUG, default=logging.INFO) optp.add_option('-v', '--verbose', help='set logging to COMM', action='store_const', dest='loglevel', const=5, default=logging.INFO) # JID and password options. optp.add_option("-j", "--jid", dest="jid", help="JID to use") optp.add_option("-p", "--password", dest="password", help="password to use") opts, args = optp.parse_args() # Setup logging. logging.basicConfig(level=opts.loglevel, format='%(levelname)-8s %(message)s') if opts.jid is None: opts.jid = raw_input("Username: ") if opts.password is None: opts.password = getpass.getpass("Password: ") xmpp = PBBot(opts.jid, opts.password) xmpp.register_plugin('xep_0030') # Service Discovery xmpp.register_plugin('xep_0004') # Data Forms xmpp.register_plugin('xep_0060') # PubSub xmpp.register_plugin('xep_0199') # XMPP Ping # If you are working with an OpenFire server, you may need # to adjust the SSL version used: # xmpp.ssl_version = ssl.PROTOCOL_SSLv3 # If you want to verify the SSL certificates offered by a server: # xmpp.ca_certs = "path/to/ca/cert" # Connect to the XMPP server and start processing XMPP stanzas. if xmpp.connect(): # If you do not have the dnspython library installed, you will need # to manually specify the name of the server if it does not match # the one in the JID. For example, to use Google Talk you would # need to use: # # if xmpp.connect(('talk.google.com', 5222)): # ... xmpp.process(block=True) print("Done") else: print("Unable to connect.")