Letztes Mal habe ich einen Papageien-Rückgabe-Bot gemacht, also wende ihn an Ich habe einen Bot gemacht, der zufällig nach englischen Wörtern fragt.
Link zum vorherigen Artikel https://qiita.com/takuya0125/items/36bdea94c249f592a59f
Ich werde die Operationsmethode von Heroku und Git weglassen.
Ich habe die folgenden Dateien im Verzeichnis erstellt. ・main.py Hauptquelle für das Schlagen und Stellen von Fragen in der Line Messaging-API
・ High1.txt Eine Textdatei, die englische Wörter und ihre Bedeutung im ersten Schuljahr beschreibt
・ Procfile · Bedarf ・ Laufzeit (.Git in versteckter Datei)
Ich werde den Inhalt der Datei main.py erklären. Da es lang ist, ist es einfacher zu verstehen, ob die Dateien getrennt sind, aber sie wurden zu einer konsolidiert.
main.py
#Modulimport
from flask import Flask, request, abort
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
)
import os
import re
import random
#high1.Lesen Sie txt
source = 'high1.txt'
with open(source, encoding="utf-8_sig") as f:
data = f.read()
english_words = re.findall('[a-z]+', data) #Alphabetextraktion
ja = re.findall('.*[Ah-Hmm].*', data) #Extraktion von Japanisch
words_dict = dict(zip(english_words, ja)) #Speichern Sie jedes in einem Wörterbuch
answer =[] #Erstellen Sie eine japanische Box mit Antworten auf Wörter
#Fragen mit einer Liste von Wörtern und Bedeutungen als 1 bis 4 Auswahlmöglichkeiten
def question():
question_word =random.choice(english_words)
correct_answer = words_dict[question_word]
meanings_copy = ja.copy() #Erstellen Sie eine Kopie, um die falschen Entscheidungen zu treffen
meanings_copy.remove(correct_answer)
wrong_answers = random.sample(meanings_copy, 3)
answer_options = [correct_answer] + wrong_answers
random.shuffle(answer_options) #Mische die Antwort
list =[] #Geben Sie die zu fragenden Optionen in das Feld ein
for i in range(4):
x = '{}. {}'.format(i + 1, answer_options[i])
list.append(x)
res = re.findall(correct_answer, x)
if len(res) ==1:
answer_num = i+1
answer.append(answer_num)
question_message = ('Problem:{}\n{}\n{}\n{}\n{}\nYour answer?'.format(question_word,list[0],list[1],list[2],list[3]))
return question_message #question_Zurück zur Nachricht
Dies ist die Frage für englische Wörter.
Als Nächstes werden wir eine Verknüpfung mit der Line Messaging-API herstellen.
main.py
app = Flask(__name__)
app.debug = False
#Umgebungsvariablen abrufen
#Beziehen Sie das in LINE Developers festgelegte Zugriffstoken und das Kanalgeheimnis und legen Sie es fest.
YOUR_CHANNEL_ACCESS_TOKEN = os.environ["YOUR_CHANNEL_ACCESS_TOKEN"]
YOUR_CHANNEL_SECRET = os.environ["YOUR_CHANNEL_SECRET"]
line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(YOUR_CHANNEL_SECRET)
Bis zu diesem Punkt wurden Einstellungen wie Token vorgenommen.
Als nächstes wird die Antwort des Benutzers auf die eigentliche Frage beschrieben.
main.py
@app.route("/callback", methods=['POST'])
def callback():
#Rufen Sie den Wert für die Signaturüberprüfung aus dem Anforderungsheader ab.
signature = request.headers['X-Line-Signature']
#Holen Sie sich den Anfragetext.
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
# handle webhook body
try:
handler.handle(body, signature)
except InvalidSignatureError:
abort(400)
return 'OK'
@handler.add(MessageEvent, message=TextMessage) #Antwort auf Textdatei
def handle_message(event):
question_message = question() #Eine Frage ausführen und in einer Variablen registrieren
text_pass = event.message.text #Registrieren Sie die empfangene Nachricht in der Variablen
#Wenn der Benutzer "a", "a", "0" sendet, wird die Frage gestellt.#
if text_pass == 'a' or text_pass =='Ah' or text_pass =='0':
line_bot_api.reply_message(
event.reply_token,
[TextSendMessage(text = question_message),])
elif int(text_pass) == int(answer[-2]): #Wenn die vom Benutzer gesendete Nummer korrekt ist, antworten Sie
line_bot_api.reply_message(event.reply_token,
[TextSendMessage(text = 'Richtige Antwort'),])
elif int(text_pass) != int(answer[-2]): #Wenn die vom Benutzer gesendete Nummer falsch ist, antworten Sie
line_bot_api.reply_message(event.reply_token,
[TextSendMessage(text = 'Falsche Antwort'),
TextSendMessage(text = 'Die richtige Antwort ist{}'.format(answer[-2]))],)
#Einstellung der Portnummer
if __name__ == "__main__":
# app.run()
port = int(os.getenv("PORT"))
app.run(host="0.0.0.0", port=port)
Bis zu diesem Punkt wird es mit Line verknüpft. Es ist mühsam, jedes Mal, wenn Sie eine Frage stellen, "a", "a" und "0" einzugeben. Dieses Mal werden wir uns weiterentwickeln und verbessern, wenn sich in Zukunft eine Gelegenheit ergibt.
Die Zusammenarbeit mit Line ist keine so hohe Hürde Die Kommunikation mit Benutzern scheint eine ziemliche Hürde zu sein. In Zukunft werden wir Ideen erweitern und implementieren, die die Zusammenarbeit mit der Line Messaging API verbessern können. Erstellen Sie nach und nach benutzerfreundliche Tools.
Wie man einen englischen Wortbot macht
Verweise ・ Einfallsreichtum der Antwortnachricht https://miyabi-lab.space/blog/21 Entsprechender Teil TextSendMessage (text = 'Was ist "' + event.message.text + '"?') )
・ Erstellen Sie mehrere Antwortnachrichten https://engineering.linecorp.com/ja/blog/imezimatsupumetsuseziwoshi-tsutezhong-dian-nicheng-richi-renaibotsutowozuo-rimashita/ Entsprechender Teil TextSendMessage (text = 'Wenn Sie Standortinformationen senden, werde ich Ihnen eine Liste der Stationen anzeigen, die bis zum letzten Zug geöffnet sind (* Piktogramm 1)'), TextSendMessage(text='line://nv/location'),
・ Funktionalisierung und Ausführung von englischen Wörtern https://shikasen-engineer.com/python_line_bot/ Entsprechender Teil result = sc.getNews(word)
· Andere https://datacoach.me/data/engineering/python-linebot-talk/ https://keinumata.hatenablog.com/entry/2018/05/08/122348 https://myafu-python.com/line-basic-1/
Recommended Posts