[PYTHON] J'ai créé un bot de lecture de chat Discord en imitant l'apparence

introduction

Le bot de lecture de chat utilisé dans Discord est temporairement devenu inutilisable, je l'ai donc créé temporairement. Je l'ai fait en réécrivant une partie du code faisant référence à Créer un bot qui lit le chat de Discord.

Préparation préalable

J'ai fait la création de bot et la construction d'environnement en regardant ce qui suit.

ffmpeg place le fichier décompressé dans C: \ open_jtalk \ bin. N'oubliez pas le paramètre Path ...

code source du bot

Veuillez réécrire le jeton de chaque bot dans la partie de la ligne du bas, qui est le jeton copié lors de la création du bot.

read_bot.py


import discord
from discord.ext import commands
import asyncio
import os
import subprocess
import ffmpeg
from voice_generator import creat_WAV

client = commands.Bot(command_prefix='.')
voice_client = None


@client.event
async def on_ready():
    print('Logged in as')
    print(client.user.name)
    print(client.user.id)
    print('------')


@client.command()
async def join(ctx):
    print('#Obtenez un canal vocal')
    vc = ctx.author.voice.channel
    print('#Connectez-vous au canal vocal')
    await vc.connect()

@client.command()
async def bye(ctx):
    print('#Déconnecter')
    await ctx.voice_client.disconnect()

@client.event
async def on_message(message):
    msgclient = message.guild.voice_client
    if message.content.startswith('.'):
        pass

    else:
        if message.guild.voice_client:
            print(message.content)
            creat_WAV(message.content)
            source = discord.FFmpegPCMAudio("output.wav")
            message.guild.voice_client.play(source)
        else:
            pass
    await client.process_commands(message)


client.run("Jeton copié lors de la création du bot")

Code source du fichier audio

Il y a divers commentaires dans le chemin du fichier vocal, mais si vous téléchargez le Code source de Sample Script dans MMD Agent Vous pouvez le changer en une voix féminine. (Puisqu'il y a un fichier htsvoice dans le répertoire Voice / mei du fichier décompressé, placez le répertoire mei dans la même hiérarchie que le code source.)

voice_generator.py


import subprocess
import re

# remove_custom_emoji
#L'identifiant du pictogramme n'est pas lu à voix haute
def remove_custom_emoji(text):
    pattern = r'<:[a-zA-Z0-9_]+:[0-9]+>'    #Motif de pictogramme personnalisé
    return re.sub(pattern,'',text)   #Processus de remplacement

# urlAbb
#Omis si URL
def urlAbb(text):
    pattern = "https?://[\w/:%#\$&\?\(\)~\.=\+\-]+"
    return re.sub(pattern,'Mort de l'URL omise!',text)   #Processus de remplacement

# creat_WAV
# message.Écrire du contenu dans un fichier texte
def creat_WAV(inputText):
        # message.Écrire du contenu dans un fichier texte

    inputText = remove_custom_emoji(inputText)   #L'identifiant du pictogramme n'est pas lu à voix haute
    inputText = urlAbb(inputText)   #Omis si URL
    input_file = 'input.txt'

    with open(input_file,'w',encoding='shift_jis') as file:
        file.write(inputText)

    command = 'C:/open_jtalk/bin/open_jtalk -x {x} -m {m} -r {r} -ow {ow} {input_file}'

    #Chemin du dictionnaire
    x = 'C:/open_jtalk/bin/dic'

    #Chemin du fichier vocal
    m = 'C:/open_jtalk/bin/nitech_jp_atr503_m001.htsvoice'
    #m = 'C:/open_jtalk/bin/mei/mei_sad.htsvoice'
    #m = 'C:/open_jtalk/bin/mei/mei_angry.htsvoice'
    #m = 'C:/open_jtalk/bin/mei/mei_bashful.htsvoice'
    #m = 'C:/open_jtalk/bin/mei/mei_happy.htsvoice'
    #m = 'C:/open_jtalk/bin/mei/mei_normal.htsvoice'

    #Vitesse de parole
    r = '1.0'

    #Nom et chemin du fichier de sortie
    ow = 'output.wav'

    args= {'x':x, 'm':m, 'r':r, 'ow':ow, 'input_file':input_file}

    cmd= command.format(**args)
    print(cmd)

    subprocess.run(cmd)
    return True

if __name__ == '__main__':
    creat_WAV('tester')

Structure du répertoire

La composition est comme ça.

image.png

Comment utiliser

Il y avait une description au point d'inviter le bot, mais il n'a pas été écrit sur la façon de l'utiliser, donc je vais l'écrire de manière appropriée.

Démarrer l'invite de commande

タイトルなし.png

Faites glisser et déposez "read_bot.py" de C: \ open_jtalk \ bin vers l'invite de commande et entrez

タイトルなし2.png

Ensuite, le bot se connectera

タイトルなし3.png

Appel au canal vocal

Tout d'abord, j'entre dans la voix. (Ce bot vient essentiellement à la personne qui a appelé la voix.) La commande à appeler est «.join»

タイトルなし4.png

Laisse moi parler

Si vous discutez correctement, il sera lu. Il ne lit pas les pictogrammes ni les pictogrammes personnalisés ... En outre, j'essaye d'omettre l'URL.

Évacuer

La commande pour quitter le bot du canal vocal est .bye

タイトルなし5.png

Nettoyer

L'invite de commande doit être «Ctrl + C» ou fermer la fenêtre.

fin

Je pense que même l'anglais simple peut être lu dans les alphabets, alors j'aimerais ajouter une fonction d'enregistrement de dictionnaire.

Eh bien, ce sera bientôt fait. peut être

Recommended Posts

J'ai créé un bot de lecture de chat Discord en imitant l'apparence
J'ai fait un robot discord
Quand j'ai créé un Discord Bot, mes camarades de classe ont détruit mon ordinateur
J'ai fait un wikipedia gacha bot
J'ai créé un robot Twitter qui marmonne le Pokémon capturé par #PokemonGO
J'ai fait un bot mou qui m'informe de la température
J'ai créé un bot Discord en Python qui se traduit quand il réagit
J'ai créé un Bot LINE avec Serverless Framework!
Made Mattermost Bot avec Python (+ Flask)
J'ai créé un LINE BOT qui renvoie une image de riz terroriste en utilisant l'API Flickr
[AWS] J'ai créé un BOT de rappel avec LINE WORKS
J'ai créé un bot de livre de compte de ménage avec LINE Bot
〇✕ J'ai fait un jeu
Création de l'outil de gestion des utilisateurs Let's Chat
Créez un BOT qui raccourcit l'URL Discord
Les débutants en Python ont créé un chat BOT alors j'ai essayé de résumer comment le faire
J'ai fait une commande pour marquer le clip de la table
Ajouter une fonction pour indiquer la météo d'aujourd'hui au bot slack (fabriqué par python)
J'ai essayé de faire un classement en grattant l'équipe des membres de l'organisation
J'ai fait une fonction pour vérifier le modèle de DCGAN
J'ai fait une image ponctuelle de l'image d'Irasutoya. (partie 1)
J'ai fait un modèle VGG16 en utilisant TensorFlow (en chemin)
J'ai fait une image ponctuelle de l'image d'Irasutoya. (partie 2)
[AWS] J'ai créé un BOT de rappel avec LINE WORKS (implémentation)
Faisons un robot Discord.
Créer un LINE BOT (chat)
J'ai fait un texte Python
J'ai créé un robot Line qui devine le sexe et l'âge d'une personne à partir de l'image
J'ai essayé de faire un programme pour résoudre (indice) la recherche d'erreur de Saiseriya
J'ai créé une caméra réseau simple en combinant ESP32-CAM et RTSP.
J'ai créé un programme qui résout la recherche d'erreur en quelques secondes
J'ai créé un bot Twitter avec Go x Qiita API x Lambda
J'ai essayé de créer un outil d'échafaudage pour le framework Web Python Bottle
J'ai fait une commande pour afficher un calendrier coloré dans le terminal
J'ai fait un programme qui calcule automatiquement le zodiaque avec tkinter
[Kaggle] J'ai fait une collection de problèmes en utilisant le didacticiel Titanic
J'ai découvert en créant un script python pour enregistrer radiko tout en lisant le code des prédécesseurs
Depuis que j'ai commencé à travailler à des moments différents, j'ai créé un Bot qui me dit l'heure de quitter le travail
J'ai créé un robot pour publier sur Twitter en grattant sur le Web un site dynamique avec AWS Lambda (suite)
[Python] J'ai créé un robot qui me dit la température actuelle lorsque j'entre un nom de lieu sur LINE
J'ai créé un site d'apprentissage C ++
J'ai fait un Line-bot avec Python!
J'ai créé un script de traduction basé sur CUI (2)
J'ai fait une loterie avec Python.
J'ai créé un script de traduction basé sur CUI
J'ai créé un démon avec Python
J'ai fait un calendrier qui met à jour automatiquement le calendrier de distribution de Vtuber
[Django] a créé un champ pour saisir des dates avec des nombres à 4 chiffres
J'ai fait une minuterie de cuisine à afficher sur la barre d'état!
J'ai créé un programme pour vous avertir par LINE lorsque les commutateurs arrivent
J'ai fait une simple minuterie qui peut être démarrée depuis le terminal
J'ai fait GAN avec Keras, donc j'ai fait une vidéo du processus d'apprentissage.
J'ai créé un konoha de bibliothèque qui fait passer le tokenizer à une belle sensation
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
J'ai fait une erreur en récupérant la hiérarchie avec MultiIndex of pandas
J'ai essayé de vérifier le résultat du test A / B avec le test du chi carré
J'ai créé une fonction pour voir le mouvement d'un tableau à deux dimensions (Python)