C'est terriblement nouveau, mais j'ai décidé d'inviter le bot sur Skype. C'est un mémo de travail à l'époque.
Le bot hut est EC2 (CentOS6).
item | value |
---|---|
region | ap-northeast-1 |
AMI | CentOS 6 (ami-25436924) |
Voici une liste de commandes supposant que vous êtes connecté avec les privilèges root.
Yum installez ce dont vous avez besoin à l'avance.
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/
Créez un script de démarrage comme celui ci-dessous.
/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= #Veuillez lister le nombre de skype pour le bot
PASSWORD= #Veuillez entrer le mot de passe de compte skype pour le bot
[ -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
Accordez l'autorisation d'exécution.
ec2# chmod +x /etc/init.d/skype
ec2# /etc/init.d/skype start
Ouvrons le port 5900 utilisé par VNC.
ec2# vi /etc/sysconfig/iptables
ec2# service iptables restart
ec2# x11vnc -display :20
Téléchargez et installez le logiciel client à partir de la page d'accueil japonaise du projet TigerVNC - Local.JP.
Vous pouvez vérifier l'adresse IP globale de l'instance EC2 à laquelle vous êtes actuellement connecté avec la commande suivante.
ec2# curl http://169.254.169.254/latest/meta-data/public-ipv4;echo
Lancez TigerVNC Viewer et connectez-vous à (adresse IP EC2): 5900
Une fois connecté, sélectionnez une langue et cliquez sur «J'accepte»
L'écran de connexion apparaîtra, mais si vous le laissez tel quel Avec USERNAME / PASSWORD décrit dans le script de démarrage, Connectez-vous sans autorisation.
Lorsque l'écran après la connexion apparaît, quittez VNC Viewer pendant un moment Revenez au travail côté serveur.
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
Comme échantillon Quand vous l'appelez "bot" Écrivez un script qui renvoie "| ΦωΦ) ...".
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
Du côté de la visionneuse VNC qui a été laissé tel quel, Le message suivant sera affiché, donc Cochez "Mémoriser cette sélection" et cliquez sur "Oui".
Bravo ☆
Fermons le serveur VNC. (Skype est toujours en cours d'exécution, donc il n'y a pas de problème)
Installons diverses réactions sur le bot.
# encoding: utf-8
import Skype4Py
import time
import re #← Ajouter
def handler(msg, event):
if event == u"RECEIVED":
#----Correspondance parfaite
if msg.Body == u"je suis":
msg.Chat.SendMessage(u"En toi")
return
#----Chercher
if re.search(u"tu", msg.Body, re.S):
msg.Chat.SendMessage(u"Avec moi")
#----Plusieurs lignes
if re.search(u"Se lever", msg.Body, re.S):
gataMsg = u"""Oh!!
∧∧ ∩
(`・ Ω ・)/
⊂ Non
(Tsuno
(Non
___/(___
/ (___/
 ̄ ̄ ̄ ̄ ̄ ̄
"""
msg.Chat.SendMessage(gataMsg)
#----Extraction de liste
if re.search(u'je', msg.Body, re.S):
list = re.findall(u'je', msg.Body, re.S)
cnt = len(list)
msg.Chat.SendMessage(u"[Avertissement de conscience de soi] I: "+str(cnt))
#----Remplacement de la chaîne
# note: python 2.Série 6 re.les drapeaux ne peuvent pas être utilisés en sous...
# http://docs.python.jp/2/library/re.html#re.sub
if re.search(u'je', msg.Body):
lines = msg.Body.splitlines()
msg.Chat.SendMessage(u'compris.')
for line in lines :
you = re.sub(u'tu', u'-tu-', line)
you = re.sub(u'je', u'tu', you)
you = re.sub(u'-tu-', u'je', you)
msg.Chat.SendMessage(you)
msg.Chat.SendMessage(u'C'est vrai.')
def main():
skype = Skype4Py.Skype(Transport='x11')
skype.OnMessageStatus = handler
skype.Attach()
while True:
time.sleep(1)
if __name__ == "__main__":
main()
Il existe des éléments «basés sur le cloud» et «basés sur le P2P» dans le chat Skype. Le groupe récemment créé semble être un chat "basé sur le cloud".
"Quels sont les commandes et les rôles du chat? - FAQ sur l'assistance Skype " https://support.skype.com/ja/faq/FA10042/
···alors, S'agit-il d'une spécification SkypeApi, d'une spécification Skype4Py ou d'un problème avec mon style d'écriture? Pour les groupes "basés sur le cloud", les bots ne reconnaissaient pas bien le groupe.
Donc, "Invitez des robots dans le groupe" Si vous souhaitez "notifier les bots au groupe de messages" J'utiliserai la "base P2P".
Le groupe actuellement ouvert Pour vérifier s'il est "basé sur le cloud" ou "basé sur le P2P" Dans le champ de saisie du message, lancez la commande suivante.
/get name
D'après l'explication sur la page Skype-FAQ ci-dessus, il semble que cela puisse être déterminé comme suit.
Si la réponse au nom du groupe commence par "19: ...", vous utilisez le chat basé sur le cloud. Si la réponse au nom du groupe commence par "#skypename ...", vous utilisez un chat basé sur le P2P.
Pour créer un groupe «basé sur le P2P» Dans le champ de saisie du message (toute discussion est OK), lancez la commande suivante.
/createmoderatedchat
Si possible, il est souhaitable que le bot lui-même lance cette commande. (Parce que le bot résident peut devenir administrateur)
C'est aussi un problème à faire depuis VNC Viewer, alors connectez-vous à votre compte bot sur votre PC Je pense qu'il vaut mieux y travailler.
Ajoutons des membres au nouveau groupe "basé sur le P2P".
Ce n’est pas seulement une réaction passive, Je souhaite être activement notifié par le bot.
Veuillez modifier le nom d'utilisateur de la destination de notification selon le cas. En enregistrant la commande suivante dans le planificateur, etc. À tout moment (ponctualité, événement, etc.) Il est possible de notifier le message, Il peut être utilisé comme rappel ou notification d'alerte.
send_message_for_user.py
# -*- coding: utf-8 -*-
import Skype4Py
import sys
user = 'username' #Réécriture requise
argvs = sys.argv
acnt = len(argvs)
skype = Skype4Py.Skype(Transport='x11')
skype.Attach()
msg = argvs[1] if acnt > 1 and argvs[1] else 'énergie?'
chat = skype.CreateChatWith(user)
chat.SendMessage(msg)
ec2# export DISPLAY=:20;
ec2# python send_message_for_group.py 'L'animation commencera dans 30 minutes'
Les notifications aux groupes sont un peu spéciales Trouvez le groupe cible dans la liste des chats auxquels vous appartenez J'essaie de notifier le message uniquement lorsqu'il s'agit du groupe correspondant.
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 'énergie?'
for chat in skype.Chats :
if chat.Name == '#skype_group_name/$1234567890abcdef': #Réécriture requise
chat.SendMessage(msg)
ec2# export DISPLAY=:20;
ec2# python send_message_for_group.py 'C'est l'heure du déjeuner, tout le monde.'
Lorsque vous l'utilisez à des fins professionnelles, faites attention à la sécurité.
■ aws marketplace : CentOS 6 (x86_64) - with Updates https://aws.amazon.com/marketplace/ordering?productId=adc4348e-1dc3-41df-b833-e86ba57a33d6
■ Créer SkypeBot (Skype4Py) sur CentOS 6.3 [2013/03/09] https://mistymagich.wordpress.com/2013/03/09/centos6-3%E3%81%ABskypebot%E3%82%92%E6%A7%8B%E7%AF%89/
■ Comment créer un bot pour Skype qui s'exécute sous Linux [2010/09/26] http://d.hatena.ne.jp/moriyoshi/20100926/1285517353
Recommended Posts