[LINE Messaging API] Créez un BOT qui se connecte à quelqu'un avec Python

Chat aléatoire

Vous pouvez vous connecter avec des utilisateurs au hasard tout en ajoutant des amis à ce bot.

couler

    1. Connectez-vous avec quelqu'un en appuyant sur "SUIVANT" image.png
  1. Vous pouvez vous déconnecter en appuyant sur "REMOVE" (* Sauf si vous vous déconnectez, vous continuerez à être connecté) image.png

Code source

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

Vérifiez et définissez votre propre chaîne ・ ** Jeton d'accès à la chaîne ** ・ ** Secret de chaîne **

config.py


# LINE Messaging API
YOUR_CHANNEL_ACCESS_TOKEN = 'Jeton d'accès au canal'
YOUR_CHANNEL_SECRET = 'Secret de chaîne'

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

REMOVE = 'REMOVE'

REMOVED = 'REMOVED'

FAILED = 'FAILED'
    1. Vérifiez si un menu riche existe (Pour plus de détails, voir Créer un menu enrichi)
  1. ** La méthode TextMessage ** est appelée lorsqu'un message est reçu (Pour plus de détails, voir 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()

** <méthode createRichmenu> **

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

** <Méthode TextMessage> **

    1. Processus de gestion des utilisateurs
  1. "NEXT" ou "REMOVE" ou traitement des messages

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)

** <Méthode de réponse> ** reply_message: Envoyez le message à l'utilisateur qui l'a envoyé (voir pour plus de détails) push_message: envoyer un message à l'utilisateur spécifié

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] Créez un BOT qui se connecte à quelqu'un avec Python
[LINE Messaging API] Créer un BOT de retour de perroquet avec Python
[Python] [LINE Bot] Créer un robot LINE de retour de perroquet
Un script qui facilite la création de menus riches avec l'API de messagerie LINE
LINE BOT avec Python + AWS Lambda + API Gateway
Étapes pour créer un bot Twitter avec Python
J'ai essayé de faire LINE BOT avec Python et Heroku
Créer un répertoire avec python
[Super facile] Faisons un LINE BOT avec Python.
Créez un bot discord qui notifie unilatéralement avec python (seuls les requêtes et json sont utilisés)
Créez une application d'apprentissage automatique avec ABEJA Platform + LINE Bot
Créez un bot Mastodon avec une fonction pour répondre automatiquement avec Python
J'ai essayé de créer LINE-bot avec Python + Flask + ngrok + LINE Messaging API
Créez un Twitter BOT avec le SDK GoogleAppEngine pour Python
Tornado - Créons une API Web qui renvoie facilement JSON avec JSON
Créez une API Web capable de fournir des images avec Django
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python
Créer Awaitable avec l'API Python / C
Créez un environnement virtuel avec Python!
Créer un bot LINE avec Django
[Python] Une histoire sur la création d'un bot LINE avec une fonction humaine pratique sans utiliser Salesforce [API de messagerie]
Création d'un BOT «Présentation non officielle du produit remis à neuf par Apple» avec l'API de messagerie LINE (v2) + API Gateway + lambda (python)
[Python / Django] Créer une API Web qui répond au format JSON
Créer une API REST qui renvoie l'heure actuelle avec Python3 + Falcon
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python (2) ~ Server ~
Créer un décorateur de fonction Python avec Class
[Python] Un programme qui crée des escaliers avec #
Créez automatiquement la documentation de l'API Python avec Sphinx
[Python] Créez un environnement virtuel avec Anaconda
Créons un groupe gratuit avec Python
Créer un compteur de fréquence de mots avec Python 3.4
[Python] Créez un LineBot qui s'exécute régulièrement
[Python] Créez rapidement une API avec Flask
Un monde typé qui commence par Python
Créez un bot qui stimule les tendances Twitter
Faisons un bot Twitter avec Python!
Créez un BOT qui peut appeler des images enregistrées avec Discord comme des pictogrammes
Créez un service Twitter BOT avec GAE / P + Tweepy + RIOT API! (Partie 1)
Créez un service Twitter BOT avec GAE / P + Tweepy + RIOT API! (Partie 2)
L'histoire de la création d'un robot LINE pour le petit-déjeuner d'une université de 100 yens avec Python
Comment créer un bot LINE à intelligence artificielle avec l'API de messagerie Flask + LINE
Les débutants en Python ont décidé de créer un bot LINE avec Flask (commentaire approximatif de Flask)
J'ai essayé de créer un LINE BOT "Sakurai-san" avec API Gateway + Lambda
J'ai fait un robot de remplacement de tampon avec une ligne
Créer un cadre avec un arrière-plan transparent avec tkinter [Python]
Envoyer un message à LINE avec Python (LINE Notify)
Créez des données de test comme ça avec Python (partie 1)
Créer un bot Twitter Trend avec heroku + Python
Un joli nimporter qui connecte nim et python
Créer un environnement virtuel avec conda avec Python
[Note] Créez une classe de fuseau horaire sur une ligne avec python
Vous pouvez facilement créer une interface graphique même avec Python
Créer un environnement de construction python3 avec Sublime Text3
Créer une barre de couleurs avec Python + Qt (PySide)
J'ai créé un Bot LINE avec Serverless Framework!
Python: créer une classe qui prend en charge l'affectation décompressée
Créer un arbre de décision à partir de 0 avec Python (1. Présentation)