[LINE Messaging API] Erstellen Sie einen BOT, der eine Verbindung zu jemandem mit Python herstellt

Zufälliger Chat

Sie können sich zufällig mit Benutzern verbinden, während Sie diesem Bot Freunde hinzufügen.

fließen

    1. Verbinden Sie sich mit jemandem, indem Sie "NEXT" drücken. image.png
  1. Sie können die Verbindung trennen, indem Sie auf "ENTFERNEN" klicken (* Wenn Sie die Verbindung nicht trennen, bleiben Sie weiterhin verbunden) image.png

Quellcode

 randomchat
    |
    |_ config.py
    |
    |_ lineapp.py
    |
    |_ lineapphandl.py
    |
    |_ reply.py
    |
    |_ richmeny.py

Überprüfen Sie Ihren eigenen Kanal und stellen Sie ihn ein ・ ** Kanalzugriffstoken ** ・ ** Kanalgeheimnis **

config.py


# LINE Messaging API
YOUR_CHANNEL_ACCESS_TOKEN = 'Kanalzugriffstoken'
YOUR_CHANNEL_SECRET = 'Kanalgeheimnis'

# messages
NEXT = 'NEXT'
NOTNEXT = 'NO PARTICIPANT'
MATCHED = 'MATCHED'

REMOVE = 'REMOVE'

REMOVED = 'REMOVED'

FAILED = 'FAILED'
    1. Überprüfen Sie, ob ein reichhaltiges Menü vorhanden ist (Weitere Informationen finden Sie unter Rich-Menü erstellen)
  1. ** TextMessage-Methode ** wird aufgerufen, wenn eine Nachricht empfangen wird (Einzelheiten finden Sie unter Aum Return BOT)

lineapp.py


from flask import Flask, request, abort

from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)
import config, lineapphandl, richmenu
import os


app = Flask(__name__)

YOUR_CHANNEL_SECRET = config.YOUR_CHANNEL_SECRET
YOUR_CHANNEL_ACCESS_TOKEN = config.YOUR_CHANNEL_ACCESS_TOKEN

line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(YOUR_CHANNEL_SECRET)

# check for existing richmenu
rich_menu_list = line_bot_api.get_rich_menu_list()
if not rich_menu_list:
    result = richmenu.createRichmeu()
    if not result:
        reply.reply_message(event, config.FAILED)

@app.route("/callback", methods=['POST'])
def callback():
    # get X-Line-Signature header value
    signature = request.headers['X-Line-Signature']

    # get request body as text
    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)

    # handle webhook body
    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        print("Invalid signature. Please check your channel access token/channel secret.")
        abort(400)

    return 'OK'


@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    lineapphandl.TextMessage(event)

if __name__ == '__main__':
    app.run()

** **

richmenu.py


from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    RichMenu, RichMenuSize, RichMenuArea, RichMenuBounds, MessageAction, PostbackTemplateAction
)
import randomchat.config


def initMenu(line_bot_api):
    result = False
    try:
        # define a new richmenu
        rich_menu_to_create = RichMenu(
            size = RichMenuSize(width=1200, height=405),
            selected = True,
            name = 'richmenu for randomchat',
            chat_bar_text = 'TAP HERE',
            areas=[
                RichMenuArea(
                    bounds=RichMenuBounds(x=0, y=0, width=480, height=405),
                    action=MessageAction(text='REMOVE')
                ),
                RichMenuArea(
                    bounds=RichMenuBounds(x=480, y=0, width=720, height=405),
                    action=MessageAction(text='NEXT')
                )
            ]
        )
        richMenuId = line_bot_api.create_rich_menu(rich_menu=rich_menu_to_create)

        # upload an image for rich menu
        image = 'richmenu.jpg'
        path = '/home/web/randomchat/' + image
        
        with open(path, 'rb') as f:
            line_bot_api.set_rich_menu_image(richMenuId, "image/jpeg", f)
        
        # set the default rich menu
        line_bot_api.set_default_rich_menu(richMenuId)

        result = True

    except Exception:
        result = False


    return result

** **

    1. Benutzerverwaltungsprozess
  1. "NEXT" oder "REMOVE" oder Nachrichtenverarbeitung

lineapphandle.py


from flask import Flask, request, abort

from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)
import config, reply
import random, copy

YOUR_CHANNEL_SECRET = config.YOUR_CHANNEL_SECRET
YOUR_CHANNEL_ACCESS_TOKEN = config.YOUR_CHANNEL_ACCESS_TOKEN

line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(YOUR_CHANNEL_SECRET)

usersList = []
usersDic = {}

def TextMessage(event):
    userId = event.source.user_id
    message = event.message.text
    
    if not userId in usersList:
        usersList.append(userId)
        if not userId in usersDic.keys():
            usersDic[userId] = {}
            usersDic[userId]['toUserId'] = ''
    
    toUsersList = copy.copy(usersList)
    toUsersList.remove(userId)


    if message == config.NEXT:
        if not len(toUsersList) == 0:
            num = random.randint(0, int(len(toUsersList)-1))
            usersDic[userId] = toUsersList[num]
            toUserId = toUsersList[num]
            usersDic[toUserId] = userId

            # delete Id form list
            usersList.remove(userId)
            usersList.remove(toUserId)
            
            # reply
            message = TextSendMessage(text=config.MATCHED)
            reply.reply_message(event, message)
            reply.push_message(toUserId, message)

        else:
            message = TextSendMessage(text=config.NOTNEXT)
            reply.reply_message(event, message)

    elif message == config.REMOVE:
        usersList.remove(userId)
        toUserId = usersDic[userId]
        if userId in usersDic.values():
            pushMessage = TextSendMessage(text=config.REMOVED)
            reply.push_message(toUserId, pushMessage)
            usersDic[toUserId] = ''
        usersDic.pop(userId)
        
        message = TextSendMessage(text=message)
        reply.reply_message(event, message)

    else:
        if usersDic[userId] == '':
            message = TextSendMessage(text=message)
            reply.reply_message(event, message)

        else:
            toUserId = usersDic[userId]
            message = TextSendMessage(text=message)
            reply.push_message(toUserId, message)

** ** reply_message: Senden Sie die Nachricht an den Benutzer, der sie gesendet hat (Details siehe ). push_message: Senden Sie eine Nachricht an den angegebenen Benutzer

reply.py


from flask import Flask, request, abort

from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)
import config, lineapphandl


YOUR_CHANNEL_SECRET = config.YOUR_CHANNEL_SECRET
YOUR_CHANNEL_ACCESS_TOKEN = config.YOUR_CHANNEL_ACCESS_TOKEN

line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(YOUR_CHANNEL_SECRET)


def reply_message(event, message):
    line_bot_api.reply_message(
        event.reply_token,
        message
    )

def push_message(toUserId, message):
    line_bot_api.push_message(
        toUserId,
        message
    )

Recommended Posts

[LINE Messaging API] Erstellen Sie einen BOT, der eine Verbindung zu jemandem mit Python herstellt
[LINE Messaging API] Erstellen Sie einen Papageienrückgabe-BOT mit Python
[Python] [LINE Bot] Erstellen Sie einen LINE Bot mit Papageienrückgabe
Ein Skript, mit dem Sie mit der LINE Messaging-API auf einfache Weise umfangreiche Menüs erstellen können
LINE BOT mit Python + AWS Lambda + API Gateway
Schritte zum Erstellen eines Twitter-Bots mit Python
Ich habe versucht, LINE BOT mit Python und Heroku zu machen
Erstellen Sie ein Verzeichnis mit Python
[Super einfach] Machen wir einen LINE BOT mit Python.
Erstellen Sie einen Discord-Bot, der einseitig mit Python benachrichtigt (nur Anfragen und JSON werden verwendet).
Erstellen Sie eine App für maschinelles Lernen mit ABEJA Platform + LINE Bot
Erstellen Sie einen Mastodon-Bot mit einer Funktion, die automatisch mit Python antwortet
Ich habe versucht, LINE-Bot mit Python + Flask + ngrok + LINE Messaging API zu erstellen
Erstellen Sie einen Twitter-BOT mit dem GoogleAppEngine SDK für Python
Tornado - Erstellen wir eine Web-API, die JSON problemlos mit JSON zurückgibt
Erstellen Sie eine Web-API, die Bilder mit Django liefern kann
Ich habe Chatbot mit LINE Messaging API und Python erstellt
Erstellen Sie Awaitable mit der Python / C-API
Erstellen Sie eine virtuelle Umgebung mit Python!
Erstellen Sie mit Django einen LINE-Bot
[Python] Eine Geschichte über das Erstellen eines LINE-Bots mit einer praktischen bemannten Funktion ohne Verwendung von Salesforce [Messaging-API]
"Inoffizielle Apple Refurbished Product Introduction" BOT mit LINE Messaging API (v2) + API Gateway + Lambda (Python)
[Python] Ich habe einen Line-Bot erstellt, der zufällig nach englischen Wörtern fragt
[Python / Django] Erstellen Sie eine Web-API, die im JSON-Format antwortet
Erstellen Sie mit Python3 + Falcon eine REST-API, die die aktuelle Uhrzeit zurückgibt
Ich habe Chatbot mit der LINE Messaging API und Python (2) ~ Server ~ erstellt
Erstellen Sie mit Class einen Python-Funktionsdekorator
[Python] Ein Programm, das Treppen mit # erstellt
Erstellen Sie automatisch eine Python-API-Dokumentation mit Sphinx
[Python] Erstellen Sie mit Anaconda eine virtuelle Umgebung
Erstellen wir mit Python eine kostenlose Gruppe
Erstellen Sie mit Python 3.4 einen Worthäufigkeitszähler
[Python] Erstellen Sie einen LineBot, der regelmäßig ausgeführt wird
[Python] Erstellen Sie schnell eine API mit Flask
Eine typisierte Welt, die mit Python beginnt
Erstellen Sie einen Bot, der Twitter-Trends verstärkt
Machen wir einen Twitter-Bot mit Python!
Erstellen Sie einen BOT, der mit Discord registrierte Bilder wie Piktogramme aufrufen kann
Erstellen Sie einen Twitter-BOT-Dienst mit der GAE / P + Tweepy + RIOT-API! (Teil 1)
Erstellen Sie einen Twitter-BOT-Dienst mit der GAE / P + Tweepy + RIOT-API! (Teil 2)
Die Geschichte, wie man mit Python einen 100-Yen-Frühstücks-Bot für die Universität macht
So erstellen Sie einen LINE-Bot mit künstlicher Intelligenz mit der Flask + LINE Messaging-API
Python-Anfänger haben beschlossen, einen LINE-Bot mit Flask zu erstellen (Flask-Kommentar)
Ich habe versucht, "Sakurai-san" LINE BOT mit API Gateway + Lambda zu erstellen
Ich habe einen Stempelersatzbot mit Linie gemacht
Erstellen Sie mit tkinter [Python] einen Rahmen mit transparentem Hintergrund.
Senden Sie eine Nachricht mit Python an LINE (LINE Notify)
Erstellen Sie solche Testdaten mit Python (Teil 1)
Machen Sie Twitter Trend Bot mit Heroku + Python
Ein netter Nimporter, der Nim und Python verbindet
Erstellen Sie eine virtuelle Umgebung mit conda in Python
[Hinweis] Erstellen Sie mit Python eine einzeilige Zeitzonenklasse
Sie können auch mit Python problemlos eine GUI erstellen
Erstellen Sie mit Sublime Text3 eine Python3-Build-Umgebung
Erstellen Sie eine Farbleiste mit Python + Qt (PySide)
Ich habe einen LINE Bot mit Serverless Framework erstellt!
Python: Erstellen Sie eine Klasse, die entpackte Zuweisungen unterstützt
Erstellen Sie mit Python einen Entscheidungsbaum von 0 (1. Übersicht)