質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

【Discord.py】 読み上げ機能を作りたいんですが、エラーを吐いてしまいます

kuripasanda
kuripasanda

総合スコア5

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0評価

0クリップ

897閲覧

投稿2021/09/04 07:34

編集2021/09/05 10:17

前提・実現したいこと

Python初心者です。
Discord.pyを使用して、読み上げ機能を作りたいです。
windowsでは問題がなかったんですが、本番環境にアップロードすると、エラー吐いてしまいます。

発生している問題・エラーメッセージ

Ignoring exception in on_message Traceback (most recent call last): File "/home/music1225/.local/lib/python3.6/site-packages/discord/client.py", line 343, in _run_event await coro(*args, **kwargs) File "/opt/discord_bot/kai/plugins/chat/bin/read_bot.py", line 72, in on_message creat_WAV(message.content) File "/opt/discord_bot/kai/plugins/chat/bin/voice_generator.py", line 44, in creat_WAV subprocess.run(cmd) File "/usr/lib64/python3.6/subprocess.py", line 423, in run with Popen(*popenargs, **kwargs) as process: File "/usr/lib64/python3.6/subprocess.py", line 729, in __init__ restore_signals, start_new_session) File "/usr/lib64/python3.6/subprocess.py", line 1364, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'open_jtalk -x dic -m mei/mei_happy.htsvoice -r 1.0 -ow output.wav input.txt': 'open_jtalk -x dic -m mei/mei_happy.htsvoice -r 1.0 -ow output.wav input.txt'

該当のソースコード

read_bot.py

python

import discord from discord.ext import commands import asyncio import os import subprocess import ffmpeg import time from voice_generator import creat_WAV TOKEN = 'TOKEN' client = commands.Bot(command_prefix='kai.') voice_client = None @client.event async def on_ready(): print('KAI-読み上げプラグイン | INFO : 起動しました') time.sleep(1) print('KAI-読み上げプラグイン | INFO : ログイン完了') print(client.user.name) print(client.user.id) print('------') @client.command() async def join(ctx): print('KAI-読み上げプラグイン | INFO : #join') print('KAI-読み上げプラグイン | INFO : #voicechannelを取得') vc = ctx.author.voice.channel print('KAI-読み上げプラグイン | INFO : #voicechannelに接続') await vc.connect() async def con(ctx): print('KAI-読み上げプラグイン | INFO : #con') print('KAI-読み上げプラグイン | INFO : #voicechannelを取得') vc = ctx.author.voice.channel print('KAI-読み上げプラグイン | INFO : #voicechannelに接続') await vc.connect() @client.command() async def dc(ctx): print('KAI-読み上げプラグイン | INFO : #dc') print('KAI-読み上げプラグイン | INFO : #切断') await ctx.voice_client.disconnect() async def disconnect(ctx): print('KAI-読み上げプラグイン | INFO : #disconnect') print('KAI-読み上げプラグイン | INFO : #切断') await ctx.voice_client.disconnect() @client.command() async def register(ctx, arg1, arg2): with open('dic.txt', mode='a') as f: f.write('\n'+ arg1 + ',' + arg2) print('KAI-読み上げプラグイン | INFO : dic.txtに書き込み:''\n'+ arg1 + ',' + arg2) await ctx.send('KAI-読み上げプラグイン | INFO : `' + arg1+'` を `'+arg2+'` として登録しました') @client.event async def on_message(message): print('KAI-読み上げプラグイン | INFO : ---on_message_start---') msgclient = message.guild.voice_client print(msgclient) if message.content.startswith('kai.'): pass else: if message.guild.voice_client: print('#message.content:'+ message.content) creat_WAV(message.content) source = discord.FFmpegPCMAudio("output.wav") message.guild.voice_client.play(source) else: pass await client.process_commands(message) print('---on_message_end---') client.run(TOKEN)

voice_generator.py

python

import subprocess import re # remove_custom_emoji # 絵文字IDは読み上げない def remove_custom_emoji(text): pattern = r'<:[a-zA-Z0-9_]+:[0-9]+>' # カスタム絵文字のパターン return re.sub(pattern,'',text) # 置換処理 # urlAbb # URLなら省略 def urlAbb(text): pattern = "https?://[\w/:%#$&?()~.=+\-]+" return re.sub(pattern,'URL省略',text) # 置換処理 encode_code = 'utf-8' def creat_WAV(text): #message.contentをテキストファイルに書き込み input_file = 'input.txt' with open(input_file,'w',encoding=encode_code) as file: file.write(text) #辞書のPath x = 'dic' #ボイスファイルのPath m = 'mei/mei_happy.htsvoice' #発声のスピード r = '1.0' #出力ファイル名 and Path ow = 'output.wav' command = 'open_jtalk -x '+x+' -m '+m+' -r '+r+' -ow '+ow+' '+input_file 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('テスト')

試したこと

open_jtalk・ffmpegを再インストールしてみたり、環境変数をいじってみたりしましたが、効果なし...

補足情報(FW/ツールのバージョンなど)

使用言語 : Discord.py
OS : CentOS Stream release 8

open_jtalk-1.10
ffmpeg-4.2.4

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。