Das gemeinsame Merkmal von ICQ, IRC, Yahoo Messenger, HipChat, Slack und Google Talk, die in "Ao" bekannt sind, ist, dass alle das XML-basierte XMPP-Protokoll für die Kommunikation verwenden. Sofortnachrichtendienste ändern sich schnell, daher denke ich, dass es wichtig ist, den Kernteil unverändert zu lassen.
Wenn Sie das XMPP-Protokoll verwenden, können Sie einen Bot erstellen, der die meisten Nachrichtendienste verwenden kann. In diesem Artikel implementieren wir einen Bot, der mehrere Nachrichtendienste mithilfe der Jabber-Bibliothek unterstützt, die XMPP entwickelt und veröffentlicht hat.
Ein Bot, der beim Start sowohl bei HipChat als auch bei Slack angemeldet ist und Befehle bereitstellt und ausführt, wenn er mit ihm spricht. Ein Sonderfall der Verwendung von Slack in Übersee und HipChat in Japan trat auf und es wurde beschlossen, es zu entwickeln. ~~ Es ist schwer während der Übergangszeit ~~ Ich denke, es ist gut, nacheinander neue Dinge einzuführen.
■ Slack
■ HipChat
■ Die Spezifikationen werden unter rfc3920 veröffentlicht. ■ Von Jabber entwickeltes XML-basiertes Kommunikationsprotokoll ■ Die folgenden 5-teiligen Informationen, die für die Verbindung erforderlich sind
Das Kommunikationsformat ist XML
Server: <stream>
<message>...</message>
Client: <stream>
<message>...</message>
Server: <message>...</message>
Client: <message>...</message>
Server: <message>...</message>
Client: <message>...</message>
Server: </stream>
Client: </stream>
■ Um Slack zu verwenden, aktivieren Sie XMPP Gate Way in Admin und zahlen Sie mit jedem Konto aus ■ In HipChat kann es mit den Standardeinstellungen verwendet werden.
Sie können einen Bot, der XMPP spricht, einfach mithilfe der Jabber-Bibliothek jabberbot
implementieren.
install
install
pip install jabberbot
pip install xmpppy
pip install lazy-reload
pip install requests
pip install simplejson
bot.py
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
import sys
import time
import traceback
import logging
from jabberbot import botcmd, JabberBot, xmpp
import multiprocessing as mp
class ChatBot(JabberBot):
"""
XMPP/Stellen Sie mit dem Jabber-Bot eine Verbindung zum Nachrichtendienst von HipChat her
"""
_content_commands = {}
_global_commands = []
_command_aliases = {}
_all_msg_handlers = []
_last_message = ''
_last_send_time = time.time()
_restart = False
def __init__(self, config):
self._config = config
channel = config['connection']['channel']
username = u"%s@%s" % (config['connection']['username'],
config['connection'].get('host',
config['connection']['host']))
self._username = username
super(ChatBot, self).__init__(
username=username,
password=config['connection']['password'])
self.PING_FREQUENCY = 50 # timeout sec
self.join_room(channel, config['connection']['nickname'])
self.log.setLevel(logging.INFO)
def join_room(self, room, username=None, password=None):
"""
Chat Room beitreten
"""
NS_MUC = 'http://jabber.org/protocol/muc'
if username is None:
username = self._username.split('@')[0]
my_room_JID = u'/'.join((room, username))
pres = xmpp.Presence(to=my_room_JID)
if password is not None:
pres.setTag(
'x', namespace=NS_MUC).setTagData('password', password)
else:
pres.setTag('x', namespace=NS_MUC)
#Lesen Sie beim Beitritt nicht den Nachrichtenverlauf
pres.getTag('x').addChild('history', {'maxchars': '0',
'maxstanzas': '0'})
self.connect().send(pres)
def callback_message(self, conn, mess):
"""
Wird ausgeführt, wenn eine Nachricht empfangen wird
"""
_type = mess.getType()
jid = mess.getFrom()
props = mess.getProperties()
text = mess.getBody()
username = self.get_sender_username(mess)
print "callback_message:{}".format(text)
print _type
# print jid
print props
print username
super(ChatBot, self).callback_message(conn, mess)
#Antworten Sie, wenn die Anfrage eine bestimmte Zeichenfolge enthält
import time
import random
time.sleep(1)
if 'Wunsch' in text:
ret = ["Ryo. Es tut mir Leid",
"Bitte warte eine Weile",
"http://rr.img.naver.jp/mig?src=http%3A%2F%2Fimgcc.naver.jp%2Fkaze%2Fmission%2FUSER%2F20141001%2F66%2F6169106%2F58%2F186x211xe15ffb8d1f6f246446c89d7e.jpg%2F300%2F600&twidth=300&theight=600&qlt=80&res_format=jpg&op=r",
"http://e-village.main.jp/gazou/image_gazou/gazou_0053.jpeg "]
self.send_simple_reply(mess, random.choice(ret))
if 'Fehler' in text:
ret = ["Ich werde es später mit meinem Verständnis beheben",
"Anerkannt",
"Wir werden nach dem Treffen danach antworten.",
"Die neueste Version wurde behoben, daher werde ich darüber nachdenken."]
self.send_simple_reply(mess, random.choice(ret))
def send_message(self, mess):
"""Send an XMPP message
Overridden from jabberbot to update _last_send_time
"""
self._last_send_time = time.time()
self.connect().send(mess)
def bot_start(conf):
print "++++++++"
print conf
print "++++++++"
bot = ChatBot(conf)
bot.serve_forever()
class ChatDaemon(object):
config = None
def run(self):
try:
# Start Slack Bot
process_slack = mp.Process(target=bot_start, args=(self.config_slack,))
process_slack.start()
# Start HipChat Bot
process_hipchat = mp.Process(target=bot_start, args=(self.config_hipchat,))
process_hipchat.start()
except Exception, e:
print >> sys.stderr, "ERROR: %s" % (e,)
print >> sys.stderr, traceback.format_exc()
return 1
else:
return 0
def main():
import logging
logging.basicConfig()
config_slack = {
'connection': {
'username': '{{name}}',
'password': '{{password}}',
'nickname': '{{name}}',
'host': '{{TeamName}}.xmpp.slack.com',
'channel': '{{RoomName}}@conference.{{TeamName}}.xmpp.slack.com',
}
}
config_hipchat = {
'connection': {
'username': '{{name}}',
'password': '{{password}}',
'nickname': '{{nickname}}',
'host': 'chat.hipchat.com',
'channel': '{{RoomName}}@conf.hipchat.com',
}
}
runner = ChatDaemon()
runner.config_slack = config_slack
runner.config_hipchat = config_hipchat
runner.run()
if __name__ == '__main__':
sys.exit(main())
■ 1.Slack SLACK muss für XMPP Gateway in admin aktiviert sein https://{{TeamName}}.slack.com/account/gateways
■ 2.HipChat https://{{組織名}}.hipchat.com/rooms/show/{{room_id}}
rfc3920 Technischer Hinweis zu XMPP (Jabber Protocol) XMPP-Einführungsseite für allgemeine Benutzer (vorläufig)
Wenn Sie die Einführung eines neuen Sofortnachrichtendienstes in Betracht ziehen, kann dies Ingenieure glücklich machen, wenn Sie prüfen, ob er das XMPP-Protokoll unterstützt.
Wenn Sie "os.subprocess (" deploy cmd hogehoge ")" in die "callback_message" -Funktion schreiben, können Sie jeden Befehl implementieren, aber ich denke, Sie werden glücklicher sein, wenn Sie einen handelsüblichen HuBot verwenden.
Lassen Sie Bot den Chat-Dienst übernehmen und schreiben Sie den Code ╭ (・ ㅂ ・) و