async def join(ctx, channel_name='', *, reconnect=True) -> bool: async def get_voice_channel() -> Optional[discord.VoiceChannel]: if channel_name == '': if not member_is_connected(ctx.author): await ctx.send( embed=MsgEmbed.error('Присоединись к каналу, мудак')) return None return ctx.author.voice.channel return get_voice_channel_by_name() async def get_voice_channel_by_name() -> Optional[discord.VoiceChannel]: channels = list( filter(lambda x: x.name == channel_name, ctx.guild.voice_channels)) if len(channels) == 0: await ctx.send(embed=MsgEmbed.error( 'Ты инвалид? Название канала неправильное')) return None elif len(channels) == 1: return channels[0] else: choice = [f' {x} ({x.position + 1}-й)\n' for x in channels] choice.insert(0, 'Отмена') answer = await ask_user(ctx, 'выбери канал', choice, icon_url=icons['list']) if answer is None: return None if answer == 0: await ctx.send(embed=MsgEmbed.warning('Подключение отменено')) return None if 1 <= answer <= len(channels): return channels[answer - 1] await ctx.send( embed=MsgEmbed.warning('Ты кто такой, сука, чтоб это делать?')) return None if not reconnect: voice = get_server(ctx).voice if voice and voice.is_connected(): return True channel = await get_voice_channel() if channel is None: return False result = await join_to_channel(ctx, channel) if result == 0: await ctx.send( embed=MsgEmbed.ok(f'Бот подключился к каналу: {channel}')) elif result == 1: await ctx.send( embed=MsgEmbed.warning(f'Бот уже подключен к каналу: {channel}')) elif result == 2: await ctx.send(embed=MsgEmbed.error(f'Ты че наделал?')) else: await ctx.send( embed=MsgEmbed.error('Ничего не понял, но очень интересно')) # Я не хачу пихать return в if'ы, что бы не нарушать гармонию форматирования return 0 <= result <= 1
async def add_all(): added_songs, songs_count = 0, len(mi_list) message = await ctx.send(embed=MsgEmbed.info('Загрузка плейлиста...')) for mi in mi_list: if server.playlist.add(mi): added_songs += 1 if added_songs == songs_count: await message.edit( embed=MsgEmbed.ok('Все песни успешно добавлены!')) return True elif added_songs == 0: await message.edit( embed=MsgEmbed.warning('Ни одна песня не была добавлена!')) return False else: await message.edit(embed=MsgEmbed.warning( f'Добавлено: {added_songs}/{songs_count}')) return True
async def add_one(): songs_list = [f' {mi.artist} - {mi.title}' for mi in mi_list] songs_list.insert(0, 'Отмена') answer = await ask_user(ctx, 'выбери песню', songs_list, icon_url=icons['search']) if answer is None: return None if answer == 0: return await cancel() if 1 <= answer <= len(mi_list): mi = mi_list[answer - 1] else: return bad_answer() if server.playlist.add(mi): await ctx.send( embed=MsgEmbed.ok(f'Добавил: {mi.artist} - {mi.title}')) return True else: await ctx.send(embed=MsgEmbed.warning('Ошибка добавления!')) return False