コード例 #1
0
ファイル: handlers.py プロジェクト: Serqati/LilSholex
def handler(request, message: dict, user_chat_id: int):
    text = message.get('text', None)
    message_id = message['message_id']
    user = classes.User(request.http_session, classes.User.Mode.SEND_AD, user_chat_id)
    user.set_username()
    user.send_ad()
    user.database.started = True
    if text in ('بازگشت 🔙', 'Back 🔙'):
        user.go_back()
        raise RequestInterruption()
    match user.database:
        case models.User(rank=(
            user.database.Rank.OWNER | user.database.Rank.ADMIN | user.database.Rank.KHIAR
        )) if text in (switch_options := ('/admin', '/user')):
            if text == switch_options[0]:
                user.menu_cleanup()
                user.database.menu_mode = user.database.MenuMode.ADMIN
                user.database.menu = models.User.Menu.ADMIN_MAIN
                user.send_message(user.translate('admin_panel'), keyboards.admin, message_id)
                user.database.save()
                raise RequestInterruption()
            else:
                user.menu_cleanup()
                user.database.menu_mode = user.database.MenuMode.USER
                user.database.menu = models.User.Menu.USER_MAIN
                user.send_message(user.translate('user_panel'), keyboards.user, message_id)
                user.database.save()
                raise RequestInterruption()
コード例 #2
0
ファイル: rating.py プロジェクト: Serqati/LilSholex
def handler(rate_option: str, meme_id: id, query_id: str, answer_query,
            inliner: User):
    try:
        meme = Meme.objects.get(id=meme_id)
    except (Meme.DoesNotExist, ValueError):
        inliner.database.save()
        raise RequestInterruption()
    if rate_option == 'up':
        if meme.voters.filter(user_id=inliner.database.user_id).exists():
            answer_query(
                query_id, user_messages['voted_before'].format(
                    user_messages[meme.type_string]), True)
        else:
            inliner.add_voter(meme)
            meme.votes = F('votes') + 1
            meme.save()
            answer_query(
                query_id, user_messages['meme_voted'].format(
                    user_messages[meme.type_string]), False)
    else:
        if meme.voters.filter(user_id=inliner.database.user_id).exists():
            inliner.remove_voter(meme)
            meme.votes = F('votes') - 1
            meme.save()
            answer_query(query_id, user_messages['took_vote_back'], False)
        else:
            answer_query(query_id, user_messages['not_voted'], True)
コード例 #3
0
ファイル: voting.py プロジェクト: Serqati/LilSholex
def handler(vote_option: str, query_id: str, meme_id: int, answer_query, inliner: UserClass):
    try:
        meme = Meme.objects.get(id=meme_id, status=Meme.Status.PENDING)
    except Meme.DoesNotExist:
        raise RequestInterruption()
    match vote_option:
        case 'a':
            if inliner.database.rank in BOT_ADMINS and inliner.database.menu == User.Menu.ADMIN_GOD_MODE:
                answer_query(
                    query_id, admin_messages['admin_meme_accepted'].format(admin_messages[meme.type_string]), True
                )
                meme.accept(inliner.session)
            elif not inliner.like_meme(meme):
                answer_query(query_id, inliner.translate('vote_before', inliner.translate(
                    meme.type_string
                )), True)
            else:
                answer_query(query_id, inliner.translate('voted'), False)
        case 'd':
            if inliner.database.rank in BOT_ADMINS and inliner.database.menu == User.Menu.ADMIN_GOD_MODE:
                answer_query(
                    query_id, admin_messages['admin_meme_denied'].format(admin_messages[meme.type_string]), True
                )
                meme.deny(inliner.session)
            elif not inliner.dislike_meme(meme):
                answer_query(query_id, inliner.translate('vote_before', inliner.translate(
                    meme.type_string
                )), True)
            else:
                answer_query(query_id, inliner.translate('voted'), False)
        case _:
            answer_query(query_id, inliner.translate(
                'voting_results', meme.accept_vote.count(), meme.deny_vote.count()
            ), True, 180)
コード例 #4
0
ファイル: reporting.py プロジェクト: Serqati/LilSholex
def handler(meme_id: int, query_id: str, answer_query, inliner: UserClass):
    try:
        meme = Meme.objects.get(id=meme_id, status=Meme.Status.PENDING)
    except (Meme.DoesNotExist, ValueError):
        inliner.database.save()
        raise RequestInterruption()
    match inliner.report_meme(meme):
        case ReportResult.REPORTED:
            answer_query(query_id, user_messages['report_submitted'], True)
        case ReportResult.REPORTED_BEFORE:
            answer_query(query_id, user_messages['reported_before'].format(user_messages[meme.type_string]), True)
        case ReportResult.REPORT_FAILED:
            answer_query(query_id, user_messages['report_reviewed'].format(user_messages[meme.type_string]), True)
コード例 #5
0
def handler(playlist_id: int, query_id: str, answer_query, inliner: UserClass):
    try:
        inliner.database.current_playlist = Playlist.objects.get(
            id=playlist_id, creator=inliner.database
        )
    except (Playlist.DoesNotExist, ValueError):
        inliner.database.save()
        raise RequestInterruption()
    inliner.menu_cleanup()
    inliner.database.menu_mode = inliner.database.MenuMode.USER
    inliner.database.menu = User.Menu.USER_MANAGE_PLAYLIST
    inliner.database.back_menu = 'manage_playlists'
    answer_query(query_id, user_messages['managing_playlist'], False)
    inliner.send_message(user_messages['manage_playlist'], manage_playlist)
コード例 #6
0
def handler(callback_type: ObjectType, meme_id: id, query_id: str, answer_query, inliner: UserClass):
    try:
        match callback_type:
            case ObjectType.PRIVATE_VOICE.value:
                inliner.database.current_meme = inliner.get_private_voice(meme_id)
                inliner.database.back_menu = 'manage_private_voices'
                inliner.database.menu = User.Menu.USER_MANAGE_PRIVATE_VOICE
            case ObjectType.SUGGESTED_VOICE.value:
                inliner.database.current_meme = inliner.get_suggested_meme(
                    meme_id, MemeType.VOICE
                )
                inliner.database.back_menu = 'voice_suggestions'
                inliner.database.menu = User.Menu.USER_MANAGE_VOICE_SUGGESTION
            case ObjectType.SUGGESTED_VIDEO.value:
                inliner.database.current_meme = inliner.get_suggested_meme(
                    meme_id, MemeType.VIDEO
                )
                inliner.database.back_menu = 'video_suggestions'
                inliner.database.menu = User.Menu.USER_MANAGE_VIDEO_SUGGESTION
            case ObjectType.PLAYLIST_VOICE.value:
                inliner.database.current_meme = inliner.database.current_playlist.voices.get(
                    id=meme_id
                )
                inliner.database.back_menu = 'manage_playlist'
                inliner.database.menu = User.Menu.USER_MANAGE_PLAYLIST_VOICE
    except Meme.DoesNotExist:
        inliner.database.save()
        raise RequestInterruption()
    temp_current_meme = inliner.database.current_meme
    inliner.menu_cleanup()
    inliner.database.current_meme = temp_current_meme
    inliner.database.menu_mode = inliner.database.MenuMode.USER
    if inliner.database.current_meme.type == MemeType.VOICE:
        meme_translation = user_messages['voice']
        meme_keyboard = manage_voice
    else:
        meme_translation = user_messages['video']
        meme_keyboard = manage_video
    answer_query(query_id, user_messages['manage_meme'].format(meme_translation), False)
    inliner.send_message(
        user_messages['managing_meme'].format(meme_translation), meme_keyboard
    )
コード例 #7
0
def handler(request, inline_query, user_chat_id):
    query = inline_query['query']
    offset = inline_query['offset']
    inline_query_id = inline_query['id']
    user = User(request.http_session, User.Mode.SEND_AD, user_chat_id)
    user.upload_voice()
    if not user.database.started:
        user.database.save()
        answer_inline_query(inline_query_id, str(), str(),
                            user.translate('start_the_bot'), 'new_user',
                            request.http_session)
        raise RequestInterruption()
    user.send_ad()
    user.set_username()
    user.database.save()
    if user.database.status != 'f':
        results, next_offset = user.get_memes(query, offset)
        answer_inline_query(inline_query_id, dumps(results), next_offset,
                            user.translate('add_meme'), 'suggest_meme',
                            request.http_session)
コード例 #8
0
ファイル: delete_logs.py プロジェクト: Serqati/LilSholex
def handler(command: str, meme_id: int, message_id: int, query_id: str,
            answer_query, inliner: User):
    try:
        deleted_meme = Meme.objects.get(id=meme_id, status=Meme.Status.DELETED)
    except Meme.DoesNotExist:
        raise RequestInterruption()
    user = User(inliner.session,
                User.Mode.NORMAL,
                instance=deleted_meme.sender)
    if command == 'r':
        deleted_meme.status = Meme.Status.ACTIVE
        assigned_admin = User(inliner.session,
                              User.Mode.NORMAL,
                              instance=deleted_meme.assigned_admin)
        deleted_meme.assigned_admin = None
        deleted_meme.save()
        assigned_admin.send_message(assigned_admin.translate(
            'deleted_meme_recovered',
            assigned_admin.translate(deleted_meme.type_string),
            deleted_meme.name),
                                    parse_mode='HTML')
        answer_query(
            query_id, translations.admin_messages['meme_recovered'].format(
                translations.admin_messages[deleted_meme.type_string]), True)
        edit_message_reply_markup(settings.MEME_LOGS,
                                  recovered,
                                  message_id=message_id,
                                  session=inliner.session)
    else:
        deleted_meme.delete()
        user.send_message(
            translations.user_messages['deleted_by_admins'].format(
                translations.user_messages[deleted_meme.type_string],
                deleted_meme.name))
        edit_message_reply_markup(settings.MEME_LOGS,
                                  deleted,
                                  message_id=message_id,
                                  session=inliner.session)
コード例 #9
0
def handler(command: str, target_id: int, message_id: int, query_id: str, answer_query, inliner: UserClass):
    inliner.delete_message(message_id)
    if not (target_message := get_message(target_id)):
        inliner.database.save()
        raise RequestInterruption()
コード例 #10
0
ファイル: delete_requests.py プロジェクト: Serqati/LilSholex
def handler(command: str, target_id: int, message_id: int, query_id: str, answer_query, inliner: User):
    if not (target_delete := get_delete(target_id)):
        raise RequestInterruption()
コード例 #11
0
ファイル: handlers.py プロジェクト: Serqati/LilSholex
def handler(request, callback_query, user_chat_id):
    answer_query = functions.answer_callback_query(request.http_session)
    if callback_query['data'] == 'none':
        raise RequestInterruption()
    query_id = callback_query['id']
    inliner = classes.User(request.http_session, classes.User.Mode.SEND_AD, user_chat_id)
    inliner.upload_voice()
    if not inliner.database.started:
        answer_query(query_id, inliner.translate('start_to_use'), True)
        inliner.database.save()
        raise RequestInterruption()
    inliner.send_ad()
    callback_data = callback_query['data'].split(':')
    try:
        message = callback_query['message']
    except KeyError:
        message_id = None
    else:
        message_id = message['message_id']
    match callback_data:
        case ('back', ):
            inliner.go_back()
        case ('p', chat_id):
            user_profile.handler(chat_id, query_id, answer_query, inliner)
        case (('a' | 'd' | 're') as vote_option, meme_id):
            voting.handler(vote_option, query_id, meme_id, answer_query, inliner)
        case (('up' | 'down') as rate_option, meme_id):
            rating.handler(rate_option, meme_id, query_id, answer_query, inliner)
        case ('rep', meme_id):
            reporting.handler(meme_id, query_id, answer_query, inliner)
        case (ObjectType.PLAYLIST.value, playlist_id):
            playlist.handler(playlist_id, query_id, answer_query, inliner)
        case ((
              ObjectType.PRIVATE_VOICE.value |
              ObjectType.SUGGESTED_VOICE.value |
              ObjectType.PLAYLIST_VOICE.value |
              ObjectType.SUGGESTED_VIDEO.value
              ) as callback_type, meme_id):
            object_types.handler(callback_type, meme_id, query_id, answer_query, inliner)
        case (page_type, page_str) if page_type.endswith('page'):
            pages.handler(ObjectType(page_type.removesuffix('page')), int(page_str), message_id, inliner)
        case ('r' | 'rd' as command, meme_id) if inliner.database.rank in BOT_ADMINS:
            delete_logs.handler(command, meme_id, message_id, query_id, answer_query, inliner)
        case (('rep_accept' | 'rep_dismiss') as command, meme_id) if inliner.database.rank != User.Rank.USER:
            try:
                report = Report.objects.get(meme__id=meme_id, status=Report.Status.PENDING)
            except Report.DoesNotExist:
                answer_query(query_id, admin_messages['meme_already_processed'], False)
                functions.edit_message_reply_markup(
                    settings.MEME_REPORTS_CHANNEL, processed, message_id, session=inliner.session
                )
                inliner.database.save()
                raise RequestInterruption()
            reports.handler(command, query_id, message_id, answer_query, report, inliner)
        case (command, target_id) if inliner.database.rank == User.Rank.OWNER:
            match command:
                case 'read' | 'ban' | 'reply':
                    messages.handler(command, target_id, message_id, query_id, answer_query, inliner)
                case 'delete' | 'delete_deny':
                    delete_requests.handler(command, target_id, message_id, query_id, answer_query, inliner)
    inliner.database.save()