[PYTHON] Erstellen Sie einen Bot für Skype unter EC2 (CentOS)

Halten Sie einen Bot auf Skype

Es ist furchtbar neu, aber ich habe beschlossen, den Bot zu Skype einzuladen. Es ist zu dieser Zeit eine Arbeitsnotiz.

chatbot.gif

EC2-Konfiguration

Die Bothütte ist EC2 (CentOS6).

skype4py-bot-house.gif

item value
region ap-northeast-1
AMI CentOS 6 (ami-25436924)

Installation

skype4py-install.gif

Im Folgenden finden Sie eine Liste von Befehlen, bei denen davon ausgegangen wird, dass Sie mit Root-Rechten angemeldet sind.

Vorbereitungen

Yum installieren, was Sie im Voraus benötigen.

ec2# yum install -y http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
ec2# yum install -y qtwebkit.i686 webkitgtk.i686 alsa-lib.i686 libXv.i686 libXScrnSaver.i686 gtk2-engines.i686 PackageKit-gtk-module.i686 libcanberra.i686 libcanberra-gtk2.i686 pulseaudio-libs.i686 alsa-plugins-pulseaudio.i686
ec2# yum install -y x11vnc ipa-gothic-fonts xauth Xvfb dbus-x11 wget

Installieren Sie Skype

Installation

ec2# cd /usr/src
ec2# wget http://www.skype.com/go/getskype-linux-beta-dynamic -O skype-4.3.0.37.tar.bz2
ec2# tar xjvf /usr/src/skype-4.3.0.37.tar.bz2 -C /usr/local
ec2# dbus-uuidgen > /var/lib/dbus/machine-id
ec2# ln -s /usr/local/skype-4.3.0.37 /usr/local/skype
ec2# ln -s /usr/local/skype /usr/share/skype
ec2# ln -s /usr/local/skype/skype /usr/local/bin/skype
ec2# useradd skype
ec2# mkdir /var/db/skype /var/run/skype/ /var/log/skype/
ec2# chown skype:skype /var/db/skype /var/run/skype/ /var/log/skype/

Erstellen eines Startskripts

Erstellen Sie ein Startskript wie das folgende.

/etc/init.d/skype


#!/bin/bash
#
# Init file for daemonized Skype service
#
### BEGIN INIT INFO
# Provides:          skype
# Required-Start:    $local_fs $remote_fs $network
# Required-Stop:     $local_fs $remote_fs $network
# Default-Start:     3 4 5
# Default-Stop:      0 1 2 6
# X-Interactive:     false
# Short-Description: Start/stop daemonized Skype service
### END INIT INFO
#
# chkconfig: 345 80 10
#
# processname: skype
#
# pidfile: /var/run/skype.pid
#

if [ -r /etc/rc.d/init.d/functions ]; then
    . /etc/rc.d/init.d/functions
    log_daemon_msg() {
        msg=$1
        prog=$2
        echo -n $"$msg $prog: "
    }
    log_end_msg() {
        if [ "$1" = "0" ]; then
            success
        elif [ "$1" = "1" ]; then
            failure
        fi
        echo
    }
elif [ -r /lib/lsb/init-functions ]; then
    . /lib/lsb/init-functions
else
    echo "Could not find a helper script needed to run this script."
    exit 1
fi

DAEMON_USER=skype
PROGNAME=`basename $0`
PIDFILE=/var/run/skype.pid
XSERVERNUM=20
XAUTHFILE=/home/skype/.Xauthority
LOGFILE=/var/log/skype/error.log
DBPATH=/var/log/skype/
XAUTHPROTO=.
SKYPE=/usr/local/skype-4.3.0.37/skype
USERNAME= #Bitte geben Sie die Skype-Anzahl für den Bot an
PASSWORD= #Bitte geben Sie das Skype-Passwort für den Bot ein

[ -f /etc/sysconfig/skype ] && . /etc/sysconfig/skype

prog="skype"
RETVAL=0

dircheck() {
    if [ ! -d `dirname "$1"` ]; then
        echo "`dirname \"$1\"` does not exist"
        return 1
    else
        return 0
    fi
}

start() {
    log_daemon_msg "Starting" "skype"
    if ! dircheck "$LOGFILE" || ! dircheck "$XAUTHFILE"; then
        log_end_msg 1
        echo
        RETVAL=1
        return 
    fi 
    MCOOKIE=`mcookie` && \
    sudo -u "$DAEMON_USER" env XAUTHORITY=$XAUTHFILE sh -c "xauth add \":$XSERVERNUM\" \"$XAUTHPROTO\" \"$MCOOKIE\" >> \"$LOGFILE\" 2>&1" && \
    sudo -u "$DAEMON_USER" env XAUTHORITY=$XAUTHFILE sh -c "Xvfb :$XSERVERNUM -screen 0 800x600x8 -nolisten tcp >> \"$LOGFILE\" 2>&1 & echo \$!" >"$PIDFILE" &&
    sleep 3 && \
    ( sudo -u "$DAEMON_USER" env LD_LIBRARY_PATH=/usr/local/skype-4.3.0.37/:$LD_LIBRARY_PATH DISPLAY=:$XSERVERNUM XAUTHORITY=$XAUTHFILE SKYPE="$SKYPE" sh -c "echo \"$USERNAME $PASSWORD\" | nohup \"$SKYPE\" --dbpath=\"$DBPATH\" --pipelogin &") >> "$LOGFILE" 2>&1 && \
    (log_end_msg 0 && [ -d /var/lock/subsys ] && touch /var/lock/subsys/skype || true) \
        || (RETVAL=$?; kill -TERM `cat $PIDFILE`; log_end_msg 1)
}

stop() {
    log_daemon_msg "Stopping" "skype"
    if [ -e "$PIDFILE" ]; then
        kill -TERM `cat $PIDFILE` && \
        rm -f $PIDFILE && \
        if [ -d /var/lock/subsys ]; then rm -f /var/lock/subsys/skype; fi && \
        log_end_msg 0 || log_end_msg 1
    else
        log_end_msg 1
        RETVAL=1
    fi
}

usage() {
    echo "Usage: $PROGNAME {start|stop|restart}"
}

case $1 in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    *)
        usage
        RETVAL=255
        ;;
esac

exit $RETVAL

Ausführungsberechtigung erteilen.

ec2# chmod +x /etc/init.d/skype

Starten Sie Skype

ec2# /etc/init.d/skype start

Zugriff mit VNC

iptables Einstellungen

Öffnen wir den von VNC verwendeten Port 5900.

ec2# vi /etc/sysconfig/iptables
ec2# service iptables restart

Starten Sie VNC

ec2# x11vnc -display :20

Greifen Sie mit VNC Viewer auf die gestartete VNC zu

Laden Sie die Client-Software von TigerVNC Project Japanese Top Page --Local.JP herunter und installieren Sie sie.

Mit dem folgenden Befehl können Sie die globale IP-Adresse der EC2-Instanz überprüfen, bei der Sie gerade angemeldet sind.

ec2# curl http://169.254.169.254/latest/meta-data/public-ipv4;echo

Starten Sie TigerVNC Viewer und stellen Sie eine Verbindung zu (EC2-IP-Adresse) her: 5900 VNC-Viewer-Access.gif

Sobald die Verbindung hergestellt ist, wählen Sie eine Sprache aus und klicken Sie auf "Zustimmen". VNC-Skype-01.gif

Der Anmeldebildschirm wird angezeigt, aber wenn Sie ihn so lassen, wie er ist Mit USERNAME / PASSWORD, das im Startskript beschrieben ist, Melden Sie sich ohne Erlaubnis an. VNC-Skype-02.gif

Wenn der Bildschirm nach der Anmeldung angezeigt wird, verlassen Sie VNC Viewer für eine Weile Kehren Sie zur Arbeit auf der Serverseite zurück.

Gespräch mit dem Bot

Installieren Sie Skype4Py

ec2# wget https://pypi.python.org/packages/source/d/distribute/distribute-0.6.49.tar.gz
ec2# tar xpvf distribute-0.6.49.tar.gz
ec2# python distribute-0.6.49/setup.py install
ec2# easy_install Skype4Py

Schreiben Sie ein Bot-Skript

Als Beispiel Wenn Sie es "Bot" nennen Schreiben Sie ein Skript, das "| ΦωΦ) ..." zurückgibt.

bot.py


# encoding: utf-8

import Skype4Py
import time

def handler(msg, event):
    if event == u"RECEIVED":
        if msg.Body == u"Bot":
            msg.Chat.SendMessage(u"|ΦωΦ) ...")

def main():
    skype = Skype4Py.Skype(Transport='x11')
    skype.OnMessageStatus = handler
    skype.Attach()
    while True:
        time.sleep(1) 

if __name__ == "__main__":
    main()

Starten Sie den Bot

ec2# export DISPLAY=:20;
ec2# python bot.py

Auf der VNC Viewer-Seite, die so belassen wurde, wie sie ist, Die folgende Meldung wird angezeigt Aktivieren Sie "Diese Auswahl speichern" und klicken Sie auf "Ja". VNC-Skype-03.gif

Versuchen Sie, über ein anderes Skype mit dem Bot zu sprechen

unnamed.png

Gut gemacht ☆

Aufräumen

Schließen wir den VNC-Server. (Skype läuft noch, es gibt also kein Problem)

Erhebe einen Bot

Lassen Sie uns verschiedene Reaktionen auf dem Bot installieren.

# encoding: utf-8

import Skype4Py
import time
import re #← Hinzufügen

def handler(msg, event):

    if event == u"RECEIVED":

        #----Perfekte Übereinstimmung
        if msg.Body == u"ich bin":
            msg.Chat.SendMessage(u"In Ihnen")
            return

        #----Suche
        if re.search(u"Sie", msg.Body, re.S):
            msg.Chat.SendMessage(u"Mit mir")

        #----Mehrere Zeilen
        if re.search(u"Aufstehen", msg.Body, re.S):
            gataMsg = u"""Oh!!
    ∧∧ ∩
    (`・ Ω ・)/
⊂ Nein
    (Tsuno
     (Nein
 ___/(___
/  (___/
 ̄ ̄ ̄ ̄ ̄ ̄
"""
            msg.Chat.SendMessage(gataMsg)

        #----Listenextraktion
        if re.search(u'ich', msg.Body, re.S):
            list = re.findall(u'ich', msg.Body, re.S)
            cnt = len(list)
            msg.Chat.SendMessage(u"[Warnung vor Selbstbewusstsein] I.: "+str(cnt))

        #----String-Ersatz
        # note: python 2.6 Serien re.Flags können nicht in Sub verwendet werden...
        #       http://docs.python.jp/2/library/re.html#re.sub
        if re.search(u'ich', msg.Body):
            lines = msg.Body.splitlines()
            msg.Chat.SendMessage(u'verstanden.')
            for line in lines :
                you = re.sub(u'Sie', u'-Sie-', line)
                you = re.sub(u'ich', u'Sie', you)
                you = re.sub(u'-Sie-', u'ich', you)
                msg.Chat.SendMessage(you)
            msg.Chat.SendMessage(u'Korrekt.')

def main():
    skype = Skype4Py.Skype(Transport='x11')
    skype.OnMessageStatus = handler
    skype.Attach()
    while True:
        time.sleep(1) 

if __name__ == "__main__":
    main()

skype-bot-chat-05.gif

Laden Sie den Bot zu einer Gruppe ein

Es gibt "Cloud-basierte" und "P2P-basierte" Dinge im Skype-Chat. Die kürzlich erstellte Gruppe scheint ein "Cloud-basierter" Chat zu sein.

"Was sind die Befehle und Rollen des Chats? --Skype Support FAQ " https://support.skype.com/ja/faq/FA10042/

···damit, Handelt es sich um eine SkypeApi-Spezifikation, eine Skype4Py-Spezifikation oder ein Problem mit meinem Schreibstil? Bei "Cloud-basierten" Gruppen erkannten Bots die Gruppe nicht gut.

Deshalb, "Bots zur Gruppe einladen" Wenn Sie "Bots die Gruppe von Nachrichten benachrichtigen" möchten Ich werde "P2P Base" verwenden.

Die aktuell geöffnete Gruppe Um zu überprüfen, ob es "Cloud-basiert" oder "P2P-basiert" ist Geben Sie im Nachrichteneingabefeld den folgenden Befehl ein.

/get name

Aus der obigen Erklärung auf der Skype-FAQ-Seite geht hervor, dass dies wie folgt bestimmt werden kann.

Wenn die Antwort auf den Gruppennamen mit "19: ..." beginnt, verwenden Sie den Cloud-basierten Chat. Wenn die Antwort auf den Gruppennamen mit "#skypename ..." beginnt, verwenden Sie einen P2P-basierten Chat.

So erstellen Sie eine "P2P-basierte" Gruppe Geben Sie im Nachrichteneingabefeld (jeder Chat ist in Ordnung) den folgenden Befehl aus.

/createmoderatedchat

Wenn möglich, ist es wünschenswert, dass der Bot selbst diesen Befehl auslöst. (Weil der residente Bot Administrator werden kann)

Mit VNC Viewer ist dies ebenfalls mühsam. Melden Sie sich daher bei Ihrem Bot-Konto auf Ihrem PC an Ich denke, es ist besser, dort zu arbeiten.

Fügen wir der neu erstellten "P2P-basierten" Gruppe Mitglieder hinzu.

Benachrichtigen Sie eine Nachricht

Es ist nicht nur eine passive Reaktion, Ich möchte vom Bot aktiv benachrichtigt werden.

An Benutzer

Bitte ändern Sie den Benutzernamen des Benachrichtigungsziels entsprechend. Durch Registrieren des folgenden Befehls im Scheduler usw. Zu jeder Zeit (pünktlich, Ereignisereignis usw.) Es ist möglich, die Nachricht zu benachrichtigen, Es kann als Erinnerung oder Benachrichtigung verwendet werden.

Benachrichtigungsskript

send_message_for_user.py


# -*- coding: utf-8 -*-
import Skype4Py
import sys

user = 'username' #Umschreiben erforderlich

argvs = sys.argv
acnt = len(argvs)

skype = Skype4Py.Skype(Transport='x11')
skype.Attach()

msg = argvs[1] if acnt > 1 and argvs[1] else 'Energie?'

chat = skype.CreateChatWith(user)
chat.SendMessage(msg)

Benachrichtigungsbefehl

ec2# export DISPLAY=:20;
ec2# python send_message_for_group.py 'Die Animation beginnt in 30 Minuten'

Zur Gruppe

Benachrichtigungen an Gruppen sind etwas Besonderes Suchen Sie die Zielgruppe aus der Liste der Chats, zu denen Sie gehören Ich versuche, die Nachricht nur zu benachrichtigen, wenn es sich um die entsprechende Gruppe handelt.

Benachrichtigungsskript

send_message_for_group.py


# -*- coding: utf-8 -*-
import Skype4Py
import sys

argvs = sys.argv
acnt = len(argvs)

skype = Skype4Py.Skype(Transport='x11')
skype.Attach()

msg = argvs[1] if acnt > 1 and argvs[1] else 'Energie?'

for chat in skype.Chats :
    if chat.Name == '#skype_group_name/$1234567890abcdef': #Umschreiben erforderlich
        chat.SendMessage(msg)

Benachrichtigungsbefehl

ec2# export DISPLAY=:20;
ec2# python send_message_for_group.py 'Es ist Mittagszeit, alle zusammen.'

Schließlich

Wenn Sie es für geschäftliche Zwecke verwenden, achten Sie bitte auf die Sicherheit.

Referenzierte Site

■ aws marketplace : CentOS 6 (x86_64) - with Updates https://aws.amazon.com/marketplace/ordering?productId=adc4348e-1dc3-41df-b833-e86ba57a33d6

■ Erstellen Sie SkypeBot (Skype4Py) unter CentOS 6.3 [09.03.2013] https://mistymagich.wordpress.com/2013/03/09/centos6-3%E3%81%ABskypebot%E3%82%92%E6%A7%8B%E7%AF%89/

■ So erstellen Sie einen Bot für Skype, der unter Linux ausgeführt wird [26.09.2010] http://d.hatena.ne.jp/moriyoshi/20100926/1285517353

Recommended Posts

Erstellen Sie einen Bot für Skype unter EC2 (CentOS)
Machen Sie Jupyter Notebook zu einem Dienst unter CentOS
Lassen Sie einen Papagei LINE Bot mit AWS Cloud9 zurückgeben
[Zum Spielen] Versuche Yuma zu einem LINE Bot zu machen (Python)
Vorgehensweise zum Erstellen eines Linienbot in AWS Lambda
Machen wir einen Discord Bot.
Machen Sie einen LINE BOT (Chat)
Erstellen Sie unter CentOS 7.7 eine Python-Umgebung für Ihren Heimserver
Machen Sie eine Tweet-Box für Pepper
Wie man einen lockeren Bot macht
Erstellen Sie eine Python-Umgebung in Centos
Erstellen Sie eine Python3-Umgebung unter CentOS7
Erstellen Sie einen Regenbenachrichtigungs-Bot für Hangouts Chat mit explosiver Geschwindigkeit
Erstellen Sie einen Discord Bot, der Bilder suchen und einfügen kann
Ein Memo mit Python2.7 und Python3 in CentOS
Machen Sie Unity Accelerator zu einem Dienst unter Linux
Qt für Python App Desktop App
ROS-Kurs 107 Machen Sie einen Kunden für Rosblidge
Erstellen Sie ein Schachbrettmuster für die Kamerakalibrierung
Machen wir einen Twitter-Bot mit Python!
Lassen Sie uns ein Backend-Plug-In für Errbot erstellen
Ich habe versucht, einen Übersetzungs-BOT zu erstellen, der mit Discord unter Verwendung von Googletrans funktioniert
Machen Sie Twitter Trend Bot mit Heroku + Python
Erstellen Sie mit Minette für Python einen LINE BOT
Erstellen Sie eine Python-Umgebung mit ansible auf centos6
Machen Sie vorerst ein Histogramm (matplotlib)
Ein Memorandum zum Berühren von Python Flask mit Heroku
Erstellen Sie eine Kubernetes-Umgebung für die Entwicklung unter Ubuntu
Erstellen Sie mit Amazon Lex einen LINE WORKS-Bot
Lassen Sie uns mit SWIG ein Modul für Python erstellen
Wie auch immer, ich bin zu Hause, also machen wir mit Discord einen (Site-) Screenshot-Funktionsbot!
Machen Sie für VB6.
Grundeinstellungen für die Verwendung von Python3.8 und pip unter CentOS8
Machen Sie mit LINE + Flask einen morphologischen Analyse-Bot
Geben Sie die Lautstärke unter Linux an und spielen Sie den Sound ab
# 2 Erstellen Sie eine Python-Umgebung mit einer EC2-Instanz von AWS (ubuntu18.04).
Verfahren zur manuellen Installation von Java (jdk1.8) unter Linux (CentOS7)
Erstellen Sie eine lokale Entwicklungsumgebung für Laravel6.X auf Ihrem Mac
Erstellen Sie unter Linux einen QR-Code für die URL
Erstellen Sie die Python-Erweiterung E-Cell 4 unter Windows 7 (64 Bit).
Erstellen Sie einen BOT, der die Discord-URL verkürzt
Machen Sie Ihren Cursor unter Linux zu einem Foto Ihrer Wahl
Vorbereitung für die pixelweise Verarbeitung von pbm-Bildern
Hinweise zur Installation von Chainer 1.5 für GPU unter Windows
Machen Sie mit Python einen Haltepunkt auf der c-Ebene
[Teil 2] Erstellen wir einen Webserver mit EC2 Linux
Machen Sie das Modell zu einer Zeichenfolge in der Django-HTML-Vorlage
Vorgehensweise zum Erstellen einer CDK-Umgebung unter Windows (Python)
[Super einfach] Machen wir einen LINE BOT mit Python.
Anfänger machen einen automatischen Bitcoin-Handelsbot, der viel Geld anstrebt! Teil 3 [Lokaler Bot]
Anfänger machen einen automatischen Bitcoin-Handelsbot, der viel Geld anstrebt! Teil 4 [Serverlos]