示例#1
0
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
示例#2
0
 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
示例#3
0
 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