Wie der Titel schon sagt,
root@4c506a68cd26:~# python --version
Python 3.7.7
root@4c506a68cd26:~# mecab --version
mecab of 0.996
Ich werde es weglassen, weil es nur dem "referenzierten Artikel" folgt.
Ich habe einen Punkt nicht verstanden oder missverstanden. Ich dachte, dass es eine Einstellung gibt, mit der der Endpunkt bei der Bereitstellung vor Ort oder in Heroku angegeben werden kann. Deshalb habe ich verschiedene Suchanfragen durchgeführt. Ich habe es nirgendwo geschrieben, aber irgendwie bin ich zu einem Schluss gekommen. Wenn ich es also schreibe, damit ich es nicht vergesse, Unabhängig davon, ob es lokal ist oder auf einem Server im Internet ausgeführt wird, stellt es eine Verbindung zum Discord-Server her und wird als online erkannt, während "client.run (TOKEN)" ausgeführt wird. Ich denke, das bedeutet es. Ich habe den Quellcode nicht gelesen und es sind keine zuverlässigen Informationen, aber ich denke, das ist wahrscheinlich der Fall.
Melden Sie sich über die CLI bei heroku an.
heroku login
Melden Sie sich mit Ihrem Browser bei heroku an.
Melden Sie sich bei der Container-Registrierung auf Heroku an.
heroku container:login
Setze die Zwietrachtmarke.
heroku config:set TOKEN=hogehoge
FROM python:3.7-slim
ENV HOME=/app
WORKDIR /app
#Wird zur Installation von NEologd verwendet
RUN apt-get update && apt-get install -y \
build-essential \
curl \
git \
openssl \
sudo \
zip \
file
#Installieren Sie MeCab
RUN apt-get update && apt-get install -y \
mecab \
libmecab-dev \
mecab-ipadic \
mecab-ipadic-utf8
RUN cd /usr/share/mecab && \
git clone https://github.com/neologd/mecab-ipadic-neologd.git && \
cd mecab-ipadic-neologd/ && \
./bin/install-mecab-ipadic-neologd -n -a -y -p /usr/share/mecab/dic/mecab-ipadic-neologd/
COPY requirements.txt ./requirements.txt
RUN pip install -r requirements.txt
COPY . .
# discord_bot.Führen Sie py aus, um den Bot zu starten
CMD ["python", "discord_bot.py"]
requirements.txt
mecab-python3
discord.py
Aus allen Nachrichten ohne Verwendung von Befehlen
discord_bot.py
import os
import MeCab
import discord
TOKEN = os.environ["TOKEN"]
PREFIX = "mecab "
client = discord.Client()
@client.event
async def on_ready():
print('Logged in as')
print(client.user.name)
print(client.user.id)
print('------')
@client.event
async def on_message(message):
print("received message: " + str(message))
if message.content.startswith(PREFIX):
#Antwortet nicht, wenn der Absender ein Bot ist
if client.user != message.author:
print(message.content)
splited_message = message.content.split() #Durch Raum teilen
splited_message.pop(0) #Der Anfang ist"mecab"Also unnötig
content = splited_message.pop() #Behandeln Sie das Ende als zu analysierende Zeichenfolge
option = ' '.join(splited_message) # "mecab "Von"{Zielzeichenfolge}"Verketten Sie die Zeichenfolgen zwischen
mecab = MeCab.Tagger(option)
m = "```" + mecab.parse(content) + "```"
print(m)
#Senden Sie eine Nachricht an den Kanal, an den die Nachricht gesendet wurde
await message.channel.send(m)
client.run(TOKEN)
heroku container:push web --app discord-bot-sample-app
heroku container:release web --app discord-bot-sample-app
Wenn die Bereitstellung erfolgreich ist, aktivieren Sie ** SCOPES ** auf der OAuth2-Seite der Discord-Entwicklerseite, um auf die unten angezeigte URL zuzugreifen und den Bot mit dem Server zu verbinden.
Dies sollte den Bot zum Laufen bringen.
mecab Die Betriebsumgebung spiegelt sich in diesem öffentlichen Repository wider. Wenn Sie eine Nachricht senden
Hier Nomenklatur,Gleichbedeutend,Allgemeines,*,*,*,Hier,Hier klicken,Hier klicken
Hilfswörter,Union,*,*,*,*,von,Nein,Nein
Öffentliche Nomenklatur,Verbindung ändern,*,*,*,*,Veröffentlichung,Kokai,Kokai
Repository-Nomenklatur,Allgemeines,*,*,*,*,*
Hilfs,Fallassistent,Allgemeines,*,*,*,Zu,D.,D.
Aktionsnomen,Verbindung ändern,*,*,*,*,Bewegung,Dousa,Dosa
Umwelt Nomen,Allgemeines,*,*,*,*,Umgebung,Kankyo,Kankyo
Hilfs,Fallassistent,Allgemeines,*,*,*,Zu,Wo,Wo
Reflexionsnomen,Verbindung ändern,*,*,*,*,Reflektieren,Hanei,Hanei
Shi Verb,Unabhängigkeit,*,*,Sahen / Suru,Kontinuierlicher Typ,Machen,Shi,Shi
Der Assistent,Verbindungsassistent,*,*,*,*,Hand,Te,Te
Ja Verb,Nicht unabhängig,*,*,Fünf Schritte, La Linie,Kontinuierlicher Typ,Gibt es,Ali,Ali
Masu Hilfsverb,*,*,*,Spezial / Masse,Grundform,Masu,Forelle,Forelle
.. Symbol,Phrase,*,*,*,*,。,。,。
EOS
Ich bekomme so eine Antwort.
mecab -d / usr / share / mecab / dic / mecab-ipadic-neologd / Zuerst bereiten wir die Zielzeichenfolge vor. Wenn Sie ein NEologd-Wörterbuch wie
angeben,
Hier Nomenklatur,Gleichbedeutend,Allgemeines,*,*,*,Hier,Hier klicken,Hier klicken
Hilfswörter,Union,*,*,*,*,von,Nein,Nein
Öffentliche Nomenklatur,Verbindung ändern,*,*,*,*,Veröffentlichung,Kokai,Kokai
Repository-Nomenklatur,Proprietäre Nomenklatur,Allgemeines,*,*,*,Repository,Repository,Repository
Hilfs,Fallassistent,Allgemeines,*,*,*,Zu,D.,D.
Betriebsumgebung Substantiv,Proprietäre Nomenklatur,Allgemeines,*,*,*,Betriebsumgebung,Dousakankyo,Dosakankyo
Hilfs,Fallassistent,Allgemeines,*,*,*,Zu,Wo,Wo
Reflexionsnomen,Verbindung ändern,*,*,*,*,Reflektieren,Hanei,Hanei
Shi Verb,Unabhängigkeit,*,*,Sahen / Suru,Kontinuierlicher Typ,Machen,Shi,Shi
Der Assistent,Verbindungsassistent,*,*,*,*,Hand,Te,Te
Ja Verb,Nicht unabhängig,*,*,Fünf Schritte, La Linie,Kontinuierlicher Typ,Gibt es,Ali,Ali
Masu Hilfsverb,*,*,*,Spezial / Masse,Grundform,Masu,Forelle,Forelle
.. Symbol,Phrase,*,*,*,*,。,。,。
EOS
Nur die "Betriebsumgebung" hat sich geändert, aber es scheint, dass das NEologd-Wörterbuch ordnungsgemäß verwendet wird.
Mit dieser Implementierung empfängt es alle Nachrichten des Servers, mit dem der Bot verbunden ist, und prüft, ob die Zeichenfolge "mecab" vorhanden ist (glaube ich, vielleicht). Das ist verschwenderisch, weil es Geld kostet, die meisten irrelevanten Nachrichten zu verarbeiten.
Wenn Sie den Befehl implementieren, können Sie die Nachricht nur empfangen, wenn die Präfixzeichenfolge und die Befehlszeichenfolge vorhanden sind (sollten möglicherweise).
discord_command_bot.py
import os
import MeCab
import discord
from discord.ext import commands
TOKEN = os.environ["TOKEN"]
bot = commands.Bot(command_prefix='!', description='Output to results of morphological analysis.')
@bot.event
async def on_ready():
print('Logged in as')
print(bot.user.name)
print(bot.user.id)
print('------')
@bot.command()
async def mecab(ctx, *args):
print("received message: " + str(args))
if bot.user != ctx.message.author:
l = list(args)
content = l.pop() #Behandeln Sie das Ende als zu analysierende Zeichenfolge
print(content)
option = ' '.join(l)
mecab = MeCab.Tagger(option)
m = "```" + mecab.parse(content) + "```"
print(m)
#Senden Sie eine Nachricht an den Kanal, an den die Nachricht gesendet wurde
await ctx.send(m)
bot.run(TOKEN)
Der Unterschied zur Nicht-Befehlsversion ist
mecab
Methode.Schreiben Sie die Docker-Datei neu, um sie in der Befehlsversion auszuführen.
CMD ["python", "discord_commmand_bot.py"]
In Heroku bereitstellen.
heroku container:push web --app discord-bot-sample-app
heroku container:release web --app discord-bot-sample-app
Der Befehl ! Mecab
sollte jetzt gültig sein.
`! mecab Die Betriebsumgebung spiegelt sich in diesem öffentlichen Repository wider. ``
Hier Nomenklatur,Gleichbedeutend,Allgemeines,*,*,*,Hier,Hier klicken,Hier klicken
Hilfswörter,Union,*,*,*,*,von,Nein,Nein
Öffentliche Nomenklatur,Verbindung ändern,*,*,*,*,Veröffentlichung,Kokai,Kokai
Repository-Nomenklatur,Allgemeines,*,*,*,*,*
Hilfs,Fallassistent,Allgemeines,*,*,*,Zu,D.,D.
Aktionsnomen,Verbindung ändern,*,*,*,*,Bewegung,Dousa,Dosa
Umwelt Nomen,Allgemeines,*,*,*,*,Umgebung,Kankyo,Kankyo
Hilfs,Fallassistent,Allgemeines,*,*,*,Zu,Wo,Wo
Reflexionsnomen,Verbindung ändern,*,*,*,*,Reflektieren,Hanei,Hanei
Shi Verb,Unabhängigkeit,*,*,Sahen / Suru,Kontinuierlicher Typ,Machen,Shi,Shi
Der Assistent,Verbindungsassistent,*,*,*,*,Hand,Te,Te
Ja Verb,Nicht unabhängig,*,*,Fünf Schritte, La Linie,Kontinuierlicher Typ,Gibt es,Ali,Ali
Masu Hilfsverb,*,*,*,Spezial / Masse,Grundform,Masu,Forelle,Forelle
.. Symbol,Phrase,*,*,*,*,。,。,。
EOS
`mecab Die Betriebsumgebung spiegelt sich in diesem öffentlichen Repository wider. ``
Keine Reaktion.
Erfolg.
Es funktioniert nach der Bereitstellung einige Minuten lang als Bot, wird jedoch bald offline geschaltet. Wenn Sie Dyno bereitstellen oder ein- oder ausschalten, wird es zurückgegeben, aber ich möchte, dass es die ganze Zeit ausgeführt wird.
https://teratail.com/questions/242975
Als ich es nachgeschlagen habe, scheint es nicht gut zu sein, den Container zum Zeitpunkt der Bereitstellung als "Web" zu verschieben.
heroku container:push web --app discord-bot-sample-app
heroku container:release web --app discord-bot-sample-app
Als Arbeiter neu einsetzen.
heroku container:push worker --app discord-bot-sample-app
heroku container:release worker --app discord-bot-sample-app
Sicherlich hat das nicht aufgehört.
Recommended Posts