はじめに
discordのチャットで送信された語録をボイスチャットでも読み上げてくれたら面白いのでは?と思って半年前くらいに作った。
音声素材はニコニコモンズなどから簡単に取得できます。
ソース
import discord from discord.ext import commands import asyncio import os import subprocess import ffmpeg client = commands.Bot(command_prefix='.') voice_client = None goroku = [ "やばいわよ", "やばいですね", ] @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): # 送信者のVCを取得 vc = ctx.author.voice.channel # Botが既に他のVCに参加しているか if ctx.voice_client: # 参加している場合は移動 await ctx.voice_client.move_to(vc) else: # 参加していない場合はVCに接続 await vc.connect() @client.command() async def start(ctx): vc = ctx.author.voice.channel ctx.voice_client.play(discord.FFmpegPCMAudio('output.wav')) @client.command() async def bye(ctx): await ctx.voice_client.disconnect() @client.event async def on_message(message): msgclient = message.guild.voice_client if message.content.startswith('.'): pass else: mcc = message.content print(mcc) if msgclient: if msgclient.is_playing(): msgclient.stop() l_in = [s for s in goroku if mcc in s] source = discord.FFmpegPCMAudio("./voice/{}.wav".format(l_in[0])) msgclient.play(source) else: l_in = [s for s in goroku if mcc in s] source = discord.FFmpegPCMAudio("./voice/{}.wav".format(l_in[0])) msgclient.play(source) else: pass await client.process_commands(message) client.run("YOUR-DISCORD-TOKEN")
使い方
Discordのチャットを読み上げるbotの作成 - Qiita これの応用みたいな感じです。ffmpegは導入必須だと思うのでいれてください。
同階層にvoice
フォルダ作ってそこのファイル名から部分一致したものを再生させてるだけな感じ。
cmdで実行して、.join
でボイスチャンネルに参加させるとテキストチャンネルの単語拾って再生されます
まとめ
身内で公開したときはウケてる印象だったから一発ネタとしてはいいんじゃないかなって思います。
追加素材はニコニコ動画とかネットの海に転がってるものを使えばずっと楽しめると思います。