Es ist furchtbar neu, aber ich habe beschlossen, den Bot zu Skype einzuladen. Es ist zu dieser Zeit eine Arbeitsnotiz.
Die Bothütte ist EC2 (CentOS6).
item | value |
---|---|
region | ap-northeast-1 |
AMI | CentOS 6 (ami-25436924) |
Im Folgenden finden Sie eine Liste von Befehlen, bei denen davon ausgegangen wird, dass Sie mit Root-Rechten angemeldet sind.
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
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 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
ec2# /etc/init.d/skype start
Öffnen wir den von VNC verwendeten Port 5900.
ec2# vi /etc/sysconfig/iptables
ec2# service iptables restart
ec2# x11vnc -display :20
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
Sobald die Verbindung hergestellt ist, wählen Sie eine Sprache aus und klicken Sie auf "Zustimmen".
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.
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.
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
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()
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".
Gut gemacht ☆
Schließen wir den VNC-Server. (Skype läuft noch, es gibt also kein Problem)
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()
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.
Es ist nicht nur eine passive Reaktion, Ich möchte vom Bot aktiv benachrichtigt werden.
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.
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)
ec2# export DISPLAY=:20;
ec2# python send_message_for_group.py 'Die Animation beginnt in 30 Minuten'
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.
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)
ec2# export DISPLAY=:20;
ec2# python send_message_for_group.py 'Es ist Mittagszeit, alle zusammen.'
Wenn Sie es für geschäftliche Zwecke verwenden, achten Sie bitte auf die Sicherheit.
■ 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