[Python] Ich habe einen Line-Bot erstellt, der zufällig nach englischen Wörtern fragt

Einführung

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.

Verzeichnisaufbau

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)

Implementierung

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.

Zusammenfassung

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.

  1. März 2020 Programmrevision int(answer[0])⇒int(answer[-2]) Holen Sie sich die vorletzte Liste

Referenz

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

[Python] Ich habe einen Line-Bot erstellt, der zufällig nach englischen Wörtern fragt
Ich habe versucht, LINE BOT mit Python und Heroku zu machen
Ich habe einen Zeilenbot erstellt, der Python verwendet, um ungelesene E-Mails aus Google Mail abzurufen!
[Python] Ich habe einen LINE-Bot erstellt, der Gesichter erkennt und Mosaikverarbeitungen durchführt.
In Python habe ich einen LINE-Bot erstellt, der Polleninformationen aus Standortinformationen sendet.
Ich habe einen Stempelersatzbot mit Linie gemacht
Ich habe einen LINE Bot mit Serverless Framework erstellt!
Mattermost Bot mit Python gemacht (+ Flask)
Ich habe in Python einen Discord-Bot erstellt, der übersetzt, wenn er reagiert
[AWS] Ich habe BOT mit LINE WORKS daran erinnert
Ich habe einen LINE BOT erstellt, der mithilfe der Flickr-API ein Bild von Reis-Terroristen zurückgibt
Ich habe einen Twitter BOT mit GAE (Python) gemacht (mit einer Referenz)
Ich habe mit LINE Bot ein Haushaltsbuch für Bot erstellt
Ich habe einen LINE-Bot erstellt, der jeden Tag pünktlich empfohlene Bilder sendet
Ich habe eine VM erstellt, auf der OpenCV für Python ausgeführt wird
[Python] Ich habe einen Bot erstellt, der mir die aktuelle Temperatur anzeigt, wenn ich einen Ortsnamen in LINE eingebe
Ich habe einen Python-Text gemacht
Ich habe einen Zwietrachtbot gemacht
Ich möchte eine Nachricht von Python an LINE Bot senden
Ich habe Chatbot mit LINE Messaging API und Python erstellt
[AWS] Ich habe BOT mit LINE WORKS (Implementierung) in Erinnerung gerufen.
Ich habe einen Line-Bot mit Python gemacht!
Ich habe einen Wikipedia Gacha Bot gemacht
Ich habe mit Python eine Lotterie gemacht.
Ich habe mit Python einen Daemon erstellt
Ich habe ein Paket erstellt, das morphologische Analysegeräte mit Python vergleichen kann
Ich habe einen Twitter-Bot erstellt, der das von #PokemonGO gefangene Pokemon murmelt
Ich habe ein Shuffle gemacht, das mit Python zurückgesetzt (zurückgesetzt) werden kann
[LINE Messaging API] Erstellen Sie einen BOT, der eine Verbindung zu jemandem mit Python herstellt
Ich habe einen schlaffen Bot gemacht, der mich über die Temperatur informiert
Ich habe Chatbot mit der LINE Messaging API und Python (2) ~ Server ~ erstellt
[Python] Ich habe eine Klasse erstellt, die schnell einen Dateibaum schreiben kann
Ich habe ein Pay-Management-Programm in Python erstellt!
Ich habe einen Linienbot erstellt, der das Geschlecht und das Alter einer Person anhand des Bildes errät
Ich habe mit Python einen Zeichenzähler erstellt
[Python] [LINE Bot] Erstellen Sie einen LINE Bot mit Papageienrückgabe
Ich habe mit Python eine Hex-Map erstellt
Nachdem ich Python3 studiert hatte, machte ich einen Slackbot
Ich habe mit Python ein schurkenhaftes Spiel gemacht
Ich habe mit Python einen einfachen Blackjack gemacht
Ich habe mit Python eine Einstellungsdatei erstellt
Ich habe mit Python einen Neuronensimulator erstellt
[Python] Ich habe einen Dekorateur gemacht, der keinen Nutzen zu haben scheint.
Ich habe eine Webanwendung in Python erstellt, die Markdown in HTML konvertiert
[Python] Ich habe ein Dienstprogramm erstellt, das wie ein Pfad auf den Diktattyp zugreifen kann
Ich habe ein Tool erstellt, das die Dekomprimierung mit CLI (Python3) etwas erleichtert.
[IOS] Ich habe ein Widget erstellt, das den Trend von Qiita in Pythonista3 anzeigt. [Python]
Ich habe ein Modul PyNanaco erstellt, das Nanaco-Guthaben mit Python belasten kann
Ich habe eine Python-Wörterbuchdatei für Neocomplete erstellt
Ich habe mit Python eine Bot-Wettervorhersage gemacht.
Ein Memo, das ich schnell in Python geschrieben habe
Ich habe eine GUI-App mit Python + PyQt5 erstellt
Erstellen Sie mit Minette für Python einen LINE BOT
Ich habe versucht, mit Python einen Twitter-Blocker für faule Mädchen zu machen
[Python] Ich habe mit Tkinter einen Youtube Downloader erstellt.
Ich habe ein Caesar-Kryptografieprogramm in Python erstellt.
Ich habe mit Python ein Bin-Picking-Spiel gemacht