[PYTHON] Créez facilement un TalkBot en utilisant Discord.py et l'API Talk d'A3RT (pya3rt).

Dans l'après-midi, j'ai essayé diverses choses en utilisant un certain Discord.py, Une personne a dit cela sur le serveur de Discord. ** "Je veux parler !!" ** Talking-kun est un TalkBot sur Discord qui est gentil avec moi et qui n'a personne à qui parler pendant un moment ... À propos, il y avait une API gratuite appelée A3RT. Très bien, faisons-le.

Précautions pour le moment.

La personne qui écrit ceci est un débutant en Python, il se peut donc que certains points ne puissent pas être atteints. À ce moment-là, soyez gentil ... C'est aussi le premier message de Qiita. J'ai hâte de travailler avec vous. ~~ C'est un chat. ~~

environnement

En ce qui concerne l'environnement, il est considérablement interdit par rapport au Bot comme l'article de Qiita, donc si vous vous référez à cela, veuillez l'ajuster à votre propre environnement.

Chose que tu veux faire

Si vous parlez sur un canal spécifique, il réagira sans condition → Renvoyez-le avec Talk API de A3RT.

Alors fais-le.

Émission de la clé API A3RT

Vous pouvez facilement émettre une clé API en envoyant un e-mail à partir de la page TalkAPI. Je l'utiliserai plus tard.

Écrivez le contenu du Bot.

run.py comme ça.

run.py


import discord
from discord.ext import commands
import asyncio
import os
import sys
import traceback

loop = asyncio.get_event_loop()

airlinia_token = os.environ['AIRLINIA_DISCORD_TOKEN'] #Variables environnementales ~~.
technetium_token = os.environ['TECHNETIUM_DISCORD_TOKEN']

class DISCORDBOT(commands.Bot):
    #constructeur.
    def __init__(self, command_prefix, cogs, **options):
        #Exécutez en passant une valeur au constructeur de la super classe.
        super().__init__(command_prefix, **options)
        #Dans le dossier Cog.Lisez le fichier py.
        for cog in os.listdir(f'./{cogs}'):
            if cog.endswith('.py'):
                try:
                    self.load_extension(f'{cogs}.{cog[:-3]}')
                except Exception:
                    traceback.print_exc()

    async def on_ready(self): #Appelez lorsque vous êtes prêt.
        print(f"""Vous êtes maintenant connecté.
        ------\Aperçu du compte nBot\n Nom d'utilisateur:{self.user.name}\n ID utilisateur:{self.user.id}
        ------\nDiscord.version de py\n{discord.__version__}
        ------\Version Python\n{sys.version}
        ――――――――――――――――――――――――――――――""")
        await self.change_presence(activity=discord.Game(name=f'{self.command_prefix}¦{self.user.name} - by.amazakura0804'))

if __name__ == '__main__':
    airlinia = DISCORDBOT(command_prefix='al!', cogs='airlinia_cogs', loop=loop)
    airlinia_task = loop.create_task(airlinia.start(airlinia_token))

    technetium = DISCORDBOT(command_prefix='te!', cogs='technetium_cogs', loop=loop)
    technetium_task = loop.create_task(technetium.start(technetium_token))

    loop.run_until_complete(technetium_task)
    loop.run_until_complete(airlinia_task)
    loop.close()

En se référant à Développement de bot à l'aide de Bot Commands Framework de discord.py. TOKEN est une variable d'environnement. Veuillez changer ici en fonction de l'environnement. Je n'en déplacerai pas plus d'un. Je pense que ce genre de sentiment est suffisant.

run.py


import discord
from discord.ext import commands
import asyncio
import os
import sys
import traceback

token = os.environ['DISCORD_TOKEN']

class HogeBot(commands.Bot):
    #constructeur.
    def __init__(self, command_prefix, cogs, **options):
        #Exécutez en passant une valeur au constructeur de la super classe.
        super().__init__(command_prefix, **options)
        #Dans le dossier Cog.Lisez le fichier py.
        for cog in os.listdir(f'./{cogs}'):
            if cog.endswith('.py'):
                try:
                    self.load_extension(f'{cogs}.{cog[:-3]}')
                except Exception:
                    traceback.print_exc()

    async def on_ready(self): #Appelez lorsque vous êtes prêt.
        print(f"""Vous êtes maintenant connecté.
        ------\Aperçu du compte nBot\n Nom d'utilisateur:{self.user.name}\n ID utilisateur:{self.user.id}
        ------\nDiscord.version de py\n{discord.__version__}
        ------\Version Python\n{sys.version}
        ――――――――――――――――――――――――――――――""")
        await self.change_presence(activity=discord.Game(name=f'{self.command_prefix}¦{self.user.name} - by.amazakura0804'))

if __name__ == '__main__':
    hogebot = HogeBot(command_prefix='!', cogs='hogebot_cogs')
    hogebot.run(token) #Jeton de robot

Talk.py

Talk.py


import discord
from discord.ext import commands
import asyncio
import os
import pya3rt

class Talk_Bot(commands.Cog):
    def __init__(self, airlinia):
        self.bot = airlinia #Recevez le bot.

    @commands.Cog.listener()
    async def on_message(self, message):
        if message.author.bot:  #Accrochez le message du bot
            return
        if message.channel.id == TALK_CHANNEL_ID: #Remplacez-le par l'ID CHANNEL que vous souhaitez prononcer selon le cas.
            client = pya3rt.TalkClient(os.environ['TALK_API_KEY']) #Puisqu'il s'agit également d'une variable d'environnement, elle est omise ci-dessous.
            content = client.talk(message.content)['results'][0]['reply']
            await message.channel.send(content) #Envoyez un message de réponse

def setup(airlinia):
    airlinia.add_cog(Talk_Bot(airlinia))

Oui. A3RT est étrange. Essayez d'appliquer la clé d'API A3RT à une variable d'environnement ou de l'insérer directement. Avec juste ce code ...

image.png

Yay. Dieu. Merci d'avoir recruté.

finalement

En utilisant diverses API, y compris A3RT, la gamme de choses qui peuvent être faites s'élargira considérablement. Il y a beaucoup d'autres choses qui semblent intéressantes, alors j'aimerais en profiter.

Recommended Posts

Créez facilement un TalkBot en utilisant Discord.py et l'API Talk d'A3RT (pya3rt).
Créer une API CRUD à l'aide de l'API rapide
Créons une API REST en utilisant SpringBoot + MongoDB
Créer une carte Web en utilisant Python et GDAL
Créez une API REST à l'aide du modèle appris dans Lobe et TensorFlow Serving.
Créer un pseudo serveur d'API REST à l'aide de pages GitHub
Créez un robot de réponse automatique en temps réel à l'aide de l'API Twitter Streaming
Tornado - Créons une API Web qui renvoie facilement JSON avec JSON
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python
Créer une API qui renvoie les données d'un modèle à l'aide de turicreate
Créez un lot planifié simple à l'aide de l'image Python de Docker et de parse-crontab
[Python] Talk en utilisant OpenJTalk et l'API Talk (jusqu'à la sortie vocale)
[Python] J'ai écrit une API REST en utilisant AWS API Gateway et Lambda.
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python (2) ~ Server ~
J'ai créé un robot musical en utilisant discord.py et l'API Google Drive (testé avec Docker → déployé sur Heroku)
Créer un dictionnaire imbriqué à l'aide de defaultdict
Créez une API en utilisant hug avec mod_wsgi
Créez un wrapper de langage C à l'aide de Boost.Python
Créer une pile avec une file d'attente et une file d'attente avec une pile (à partir de LetCode / Implémenter la pile à l'aide de files d'attente, Implémenter la file d'attente à l'aide de piles)
J'ai créé un exemple pour accéder à Salesforce en utilisant Python et Bottle