1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-23 19:44:20 +00:00

Add play command

omg it actually works
This commit is contained in:
Steffo 2019-04-16 01:01:12 +02:00
parent 5d2eebd118
commit 71cc0e35dd

View file

@ -5,9 +5,11 @@ import logging as _logging
import sys import sys
from ..commands import NullCommand from ..commands import NullCommand
from ..commands.summon import SummonMessage, SummonSuccessful, SummonError from ..commands.summon import SummonMessage, SummonSuccessful, SummonError
from ..commands.play import PlayMessage, PlaySuccessful, PlayError
from ..utils import asyncify, Call, Command, UnregisteredError from ..utils import asyncify, Call, Command, UnregisteredError
from ..network import RoyalnetLink, Message from ..network import RoyalnetLink, Message
from ..database import Alchemy, relationshiplinkchain from ..database import Alchemy, relationshiplinkchain
from ..audio import RoyalAudioFile
loop = asyncio.get_event_loop() loop = asyncio.get_event_loop()
log = _logging.getLogger(__name__) log = _logging.getLogger(__name__)
@ -45,23 +47,7 @@ class DiscordBot:
self.identity_column = self.identity_table.__getattribute__(self.identity_table, identity_column_name) self.identity_column = self.identity_table.__getattribute__(self.identity_table, identity_column_name)
self.identity_chain = relationshiplinkchain(self.master_table, self.identity_table) self.identity_chain = relationshiplinkchain(self.master_table, self.identity_table)
async def network_handler(message: Message) -> Message: self.network: RoyalnetLink = RoyalnetLink(master_server_uri, master_server_secret, "discord", self.network_handler)
if isinstance(message, SummonMessage):
channels: typing.List[discord.abc.GuildChannel] = self.bot.get_all_channels()
matching_channels: typing.List[discord.VoiceChannel] = []
for channel in channels:
if isinstance(channel, discord.VoiceChannel):
if channel.name == message.channel_name:
matching_channels.append(channel)
if len(matching_channels) == 0:
return SummonError("No channels with a matching name found")
elif len(matching_channels) > 1:
return SummonError("Multiple channels with a matching name found")
matching_channel = matching_channels[0]
await self.bot.vc_connect_or_move(matching_channel)
return SummonSuccessful()
self.network: RoyalnetLink = RoyalnetLink(master_server_uri, master_server_secret, "discord", network_handler)
loop.create_task(self.network.run()) loop.create_task(self.network.run())
# noinspection PyMethodParameters # noinspection PyMethodParameters
@ -146,6 +132,39 @@ class DiscordBot:
self.DiscordClient = DiscordClient self.DiscordClient = DiscordClient
self.bot = self.DiscordClient() self.bot = self.DiscordClient()
async def network_handler(self, message: Message) -> Message:
if isinstance(message, SummonMessage):
return await self.nh_summon(message)
elif isinstance(message, PlayMessage):
return await self.nh_play(message)
async def nh_summon(self, message: SummonMessage):
channels: typing.List[discord.abc.GuildChannel] = self.bot.get_all_channels()
matching_channels: typing.List[discord.VoiceChannel] = []
for channel in channels:
if isinstance(channel, discord.VoiceChannel):
if channel.name == message.channel_name:
matching_channels.append(channel)
if len(matching_channels) == 0:
return SummonError("No channels with a matching name found")
elif len(matching_channels) > 1:
return SummonError("Multiple channels with a matching name found")
matching_channel = matching_channels[0]
await self.bot.vc_connect_or_move(matching_channel)
return SummonSuccessful()
async def nh_play(self, message: PlayMessage):
# TODO: actually do what's intended to do
# Download the audio
file = await asyncify(RoyalAudioFile.create_from_url, message.url)
# Get the audio source
audio_source = file[0].as_audio_source()
# Play the audio source
for voice_client in self.bot.voice_clients:
voice_client: discord.VoiceClient
voice_client.play(audio_source)
return PlaySuccessful()
async def run(self): async def run(self):
await self.bot.login(self.token) await self.bot.login(self.token)
await self.bot.connect() await self.bot.connect()