J'ai tout écrit en même temps avec une tension de minuit, donc je peux le réparer beaucoup. Dans cet article, je vais vous expliquer comment démarrer slackbot. Déployez et exploitez! J'espère que vous pourrez faire de votre mieux tout en regardant d'autres articles ... Le code utilisé dans cet article est posté ici [https://github.com/kota-shiokara/processing-slackbot).
Veuillez noter que diverses explications sont omises dans cet article.
Installez les bibliothèques slackbot et Pillow avec pip. (Dans certains cas,
pip3```)
$ pip install slackbot
$ pip install Pillow
$ pip list #Vérifier les bibliothèques installées
Installez également processing-java. Cet article est recommandé pour l'introduction du traitement. Vous devriez pouvoir l'installer en cliquant sur Traitement du téléchargement, en le lançant et en sélectionnant «Outils»> «Installer processing-java» dans la barre d'outils.
Veuillez créer un bot à partir du site suivant. Veillez à ne pas vous tromper dans l'espace de travail que vous créez. https://my.slack.com/services/new/bot (À l'origine, ce n'est pas recommandé, et vous devez faire des choses gênantes telles que le réglage de la portée, mais cette fois, je vais aller avec.)
Entrez le nom du bot dans ce nom d'utilisateur et appuyez sur "Ajouter une intégration de bot".
Notez le "jeton API" affiché en le copiant. Personnalisez le nom, l'icône, etc. à votre guise.
Lorsque vous avez terminé, appuyez sur le bouton en bas de la page pour enregistrer vos paramètres.
Après cela, vous pouvez modifier et vérifier le jeton sur la page qui apparaît en recherchant "bots" sur la page
https: // <URL de l'espace de travail> / apps```.
Préparez un répertoire comme celui ci-dessous. Si vous clonez ici, vous pouvez sauter la plupart du travail. (Dans ce cas, veuillez préparer le dossier (*) et les fichiers!)
slackbot #Un annuaire qui organise les programmes. Chaîne de caractères arbitraire
├─ run.py #Fichier principal pour démarrer le bot
├─ slackbot_settings.py #Fichier pour écrire les paramètres liés au bot(※)
├─ plugins #Ajouter une fonctionnalité de bot à ce répertoire
├─ __init__.py #Un fichier pour indiquer le module. OK dans le ciel
└─ func.py #Un fichier pour écrire une fonction. Chaîne de caractères arbitraire
└─ cfg.py #Fichier pour mettre le chemin de l'esquisse(※)
└─ sketch (※)
└─ sketch.pde #Un fichier d'esquisse à écrire une fois. OK dans le ciel(※)
Écrivez le code ci-dessous.
run.py
from slackbot.bot import Bot
def main():
bot = Bot()
bot.run()
if __name__ == "__main__":
print('start slackbot')
main()
slackbot_settings.py
API_TOKEN = "<Jeton d'API noté>"
DEFAULT_REPLY = "<Toute chaîne que vous souhaitez renvoyer par défaut>"
PLUGINS = ['plugins'] #Le nom du répertoire qui contient le code qui écrit la fonctionnalité du bot
func.py
from slackbot.bot import respond_to # @botname:Décodeur qui réagit avec
from slackbot.bot import listen_to #Décodeur qui répond aux remarques dans le canal
from slackbot.bot import default_reply #Décodeur qui réagit lorsqu'il n'y a pas de réponse correspondante
import sys, subprocess, os.path, os, glob, time
from .cfg import * #Cfg dans la même hiérarchie.importer depuis py
from PIL import Image
@listen_to('!output (.*)')
def output(message, arg): #arg est facultatif
#Mettre en forme le texte envoyé
tmp = message.body['text']
tmp = tmp.replace("<", "<")
tmp = tmp.replace(">", ">")
#Formaté en une chaîne de caractères pour écraser pde
pdeCode = shaping_code(tmp.strip("!output " + arg + "\n"), arg)
message.send('wait...')
#Écraser pde
print(pdeCode)
f = open('sketch/sketch.pde', 'w')
f.write(pdeCode)
f.close()
cp = subprocess.run(['processing-java', sketch_path, '--run']) #Exécution du traitement
if cp.returncode != 0: #Traitement en cas d'échec du traitement
message.send('Run is failed.')
sys.exit(1) #Un système qui ne fonctionne pas pour une raison quelconque.exit()
upload_sequence(message, arg) #processus de téléchargement
def shaping_code(code, option): #Ajout de la méthode de sortie d'image au code pde
if option == '--png': #option png
pictFunc = " if((frameCount <= 15) && (frameCount % 15 == 0)) saveFrame(\"####.png\");\n else if(frameCount > 15) exit();"
elif option == '--gif': #option gif
pictFunc = " if((frameCount <= 300) && (frameCount % 15 == 0)) saveFrame(\"####.png\");\n else if(frameCount > 300) exit();"
else : #Renvoie en png par défaut
pictFunc = " if((frameCount <= 15) && (frameCount % 15 == 0)) saveFrame(\"####.png\");\n else if(frameCount > 15) exit();"
return code.replace("void draw(){", "void draw(){\n" + pictFunc)
def upload_sequence(message, option):
if option == '--png': #option png
message.channel.upload_file(fname="sketch/0015.png ", fpath="sketch/0015.png ")
if os.path.exists('sketch/0015.png'):
os.remove('sketch/0015.png')
elif option == '--gif': #option gif
time.sleep(6)
file_list = sorted(glob.glob('sketch/*.png'))
images = list(map(lambda file : Image.open(file) , file_list))
images[0].save('sketch/output.gif' , save_all = True , append_images = images[1:] , duration = 400 , loop = 0)
if os.path.exists('sketch/output.gif'):
message.channel.upload_file(fname="sketch/output.gif", fpath="sketch/output.gif")
for p in glob.glob('sketch/*.png'):
if os.path.isfile(p):
os.remove(p)
os.remove('sketch/output.gif')
else : #Télécharger avec png par défaut
message.channel.upload_file(fname="sketch/0015.png ", fpath="sketch/0015.png ")
if os.path.exists('sketch/0015.png'):
os.remove('sketch/0015.png')
cfg.py
sketch_path = '--sketch=/Users/<Nom d'utilisateur>/slackbot/sketch' #Spécifiez le répertoire contenant le dossier d'esquisse que vous souhaitez lire avec un chemin absolu
Commençons réellement le bot lorsque la préparation est terminée. Accédez au répertoire slackbot et
$ python3 run.py
Lançons le programme en appuyant sur.
--Pour png
Si vous envoyez le code avec ``! Output --png``` et que le bot qui retourne en png se déplace comme ça, vous gagnez. De plus, puisque le png complété est automatiquement supprimé, vous n'avez pas à vous soucier de la pression sur la capacité.--Pour gif
Si vous envoyez le code avec ``! Output --gif``` et que le bot qui retourne en png se déplace comme ça, vous gagnez. Les gif et png seront supprimés de la même manière.
C'est une mauvaise explication, mais c'est la fin de l'explication jusqu'au démarrage. C'était intéressant de pouvoir frapper des commandes avec sous-processus et créer diverses commandes en utilisant des expressions régulières. Si vous êtes motivé, j'écrirai un article expliquant la méthode utilisée et un article sur le fonctionnement des robots. C'est inconnu car je ne l'ai pas encore déployé ... ~~ (Qu'est-ce que l'infrastructure) ~~