Ich habe alles auf einmal mit Mitternachtsspannung geschrieben, damit ich es viel reparieren kann. In diesem Artikel werde ich erklären, wie man Slackbot startet. Bereitstellen und betreiben! Ich hoffe, Sie können Ihr Bestes geben, während Sie sich andere Artikel ansehen ... Der in diesem Artikel verwendete Code wird hier veröffentlicht [https://github.com/kota-shiokara/processing-slackbot].
Bitte beachten Sie, dass in diesem Artikel verschiedene Erklärungen weggelassen werden.
Installieren Sie Slackbot- und Pillow-Bibliotheken mit pip. (In einigen Fällen `` `pip3```)
$ pip install slackbot
$ pip install Pillow
$ pip list #Überprüfen Sie die installierten Bibliotheken
Installieren Sie auch Processing-Java. Dieser Artikel wird für die Einführung der Verarbeitung empfohlen. Sie sollten in der Lage sein, es zu installieren, indem Sie auf Download-Verarbeitung herunterladen klicken, es starten und in der Symbolleiste "Extras"> "Processing-Java installieren" auswählen.
Bitte erstellen Sie einen Bot von der folgenden Seite. Achten Sie darauf, dass Sie im von Ihnen erstellten Arbeitsbereich keinen Fehler machen. https://my.slack.com/services/new/bot (Ursprünglich wird dies nicht empfohlen, und Sie müssen einige problematische Dinge tun, z. B. das Festlegen des Bereichs, aber diesmal werde ich damit fortfahren.)
Geben Sie den Namen des Bots in diesen Benutzernamen ein und klicken Sie auf "Bot-Integration hinzufügen".
Notieren Sie sich das angezeigte "API-Token", indem Sie es kopieren. Passen Sie den Namen, das Symbol usw. nach Ihren Wünschen an.
Wenn Sie fertig sind, drücken Sie die Taste unten auf der Seite, um Ihre Einstellungen zu speichern.
Danach können Sie das Token auf der angezeigten Seite bearbeiten und überprüfen, indem Sie auf der Seite `` https: //
Bereiten Sie ein Verzeichnis wie das folgende vor. Wenn Sie [hier] klonen (https://github.com/kota-shiokara/processing-slackbot), können Sie den größten Teil der Arbeit überspringen. (In diesem Fall bereiten Sie bitte den Ordner (*) und die Dateien vor!)
slackbot #Ein Verzeichnis, das Programme organisiert. Beliebige Zeichenfolge
├─ run.py #Hauptdatei zum Starten des Bots
├─ slackbot_settings.py #Datei zum Schreiben von Einstellungen für Bot(※)
├─ plugins #Fügen Sie diesem Verzeichnis Bot-Funktionen hinzu
├─ __init__.py #Eine Datei zur Angabe des Moduls. OK am Himmel
└─ func.py #Eine Datei zum Schreiben einer Funktion. Beliebige Zeichenfolge
└─ cfg.py #Datei, um den Pfad der Skizze zu setzen(※)
└─ sketch (※)
└─ sketch.pde #Eine einmal zu schreibende Skizzendatei. OK am Himmel(※)
Schreiben Sie den folgenden Code.
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 = "<Notiertes API-Token>"
DEFAULT_REPLY = "<Jede Zeichenfolge, die Sie standardmäßig zurückgeben möchten>"
PLUGINS = ['plugins'] #Der Name des Verzeichnisses, das den Code enthält, der die Funktionalität des Bots schreibt
func.py
from slackbot.bot import respond_to # @botname:Decoder, der mit reagiert
from slackbot.bot import listen_to #Decoder, der auf kanalinterne Bemerkungen reagiert
from slackbot.bot import default_reply #Decoder, der reagiert, wenn keine entsprechende Antwort erfolgt
import sys, subprocess, os.path, os, glob, time
from .cfg import * #Cfg in der gleichen Hierarchie.Import von py
from PIL import Image
@listen_to('!output (.*)')
def output(message, arg): #arg ist optional
#Formatieren Sie den gesendeten Text
tmp = message.body['text']
tmp = tmp.replace("<", "<")
tmp = tmp.replace(">", ">")
#Formatiert in eine Zeichenfolge zum Überschreiben von pde
pdeCode = shaping_code(tmp.strip("!output " + arg + "\n"), arg)
message.send('wait...')
#Pde überschreiben
print(pdeCode)
f = open('sketch/sketch.pde', 'w')
f.write(pdeCode)
f.close()
cp = subprocess.run(['processing-java', sketch_path, '--run']) #Ausführung der Verarbeitung
if cp.returncode != 0: #Verarbeitung bei fehlgeschlagener Verarbeitung
message.send('Run is failed.')
sys.exit(1) #System, das aus irgendeinem Grund nicht funktioniert.exit()
upload_sequence(message, arg) #Upload-Prozess
def shaping_code(code, option): #Bildausgabemethode zum PDE-Code hinzugefügt
if option == '--png': #PNG-Option
pictFunc = " if((frameCount <= 15) && (frameCount % 15 == 0)) saveFrame(\"####.png\");\n else if(frameCount > 15) exit();"
elif option == '--gif': #GIF-Option
pictFunc = " if((frameCount <= 300) && (frameCount % 15 == 0)) saveFrame(\"####.png\");\n else if(frameCount > 300) exit();"
else : #Gibt standardmäßig als PNG zurück
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': #PNG-Option
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': #GIF-Option
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 : #Standardmäßig mit PNG hochladen
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/<Nutzername>/slackbot/sketch' #Geben Sie das Verzeichnis mit dem Skizzenordner, den Sie lesen möchten, mit einem absoluten Pfad an
Lassen Sie uns den Bot tatsächlich starten, wenn die Vorbereitung abgeschlossen ist. Gehen Sie zum Slackbot-Verzeichnis und
$ python3 run.py
Lassen Sie uns das Programm durch Drücken von ausführen.
Wenn Sie den Code mit `` `! Output --gif``` senden und der Bot, der in png zurückkehrt, sich so bewegt, gewinnen Sie. Sowohl gif als auch png werden auf die gleiche Weise gelöscht.
Dies ist eine schlechte Erklärung, aber dies ist das Ende der Erklärung bis zum Start. Es war interessant, Befehle mit Unterprozessen treffen und verschiedene Befehle mit regulären Ausdrücken erstellen zu können. Wenn Sie motiviert sind, schreibe ich einen Artikel, in dem die verwendete Methode erläutert wird, und einen Artikel über die Bot-Operation. Es ist unbekannt, weil ich es noch nicht bereitgestellt habe ... ~~ (Was ist Infrastruktur) ~~
Recommended Posts