Example #1
0
def player_info(message):
    from_user = user_manager.get(message.from_user.id)
    curator_session_query = session_manager.by_curator(from_user)
    active_session_query = session_manager.by_curator(from_user,
                                                      activeOnly=True)
    player_game_query = user_session_manager.by_player(from_user)
    active_game_query = user_session_manager.by_player(from_user,
                                                       activeOnly=True)
    text = ''

    if curator_session_query:
        curator = '\n'.join([
            f'{session}: {session.name}' for session in curator_session_query
        ])
        text += f'\n\nYour as curator in session(s) [id: name]:\n{curator}'
    if active_session_query:
        active_curator = '\n'.join(
            [f'{session}: {session.name}' for session in active_session_query])
        text += f'\n\nYour as curator in active session(s) [id: name]:\n{active_curator}'
    if player_game_query:
        player = '\n'.join(
            [f'{session}: {session.name}' for session in player_game_query])
        text += f'\n\nSessions in which you participate [id: name]:\n{player}'
    if active_game_query:
        active_player = '\n'.join(
            [f'{session}: {session.name}' for session in active_game_query])
        text += f'\n\nYour active games [id: name]:\n{active_player}'

    if not text:
        bot.reply_to(message, 'There is nothing to show')
    else:
        text = f'Total info: {text}'
        bot.reply_to(message, text)
Example #2
0
def process_get_file(message, chosen_session):
    user_session = user_session_manager.get(chosen_session)
    if message.document:
        file_info = bot.get_file(message.document.file_id)
    else:
        return

    try:
        file = requests.get(f'https://api.telegram.org/file/bot{tg_token}/{file_info.file_path}', proxies=tg_proxy)
        if not 200 <= int(file.status_code) <= 299:
            raise Exception(f'Cant download save-game. Status code: {file.status_code}')
    except Exception as e:
        error(e)
        bot.reply_to(message, 'Something went wrong!')
        return

    file_name = user_session.game_name()
    with open(file_name, 'wb') as f:
        f.write(file.content)
    save_id = google_drive.upload_file(file_name, file_name, user_session.session.folder)
    os.remove(file_name)

    user_session_manager.write_save(save_id, user_session)

    old, new = user_session_manager.step(user_session.session)
    bot.reply_to(message, 'Your turn came to the end!')
    if new:
        bot.send_message(new.user, f'Your turn!\nDownload the save: {google_drive.get_link(save_id)}')
    else:
        bot.send_message(old.session.chat, f'The round of game is end. Last save: {google_drive.get_link(save_id)}')
Example #3
0
def fact(message):
    session = session_manager.active_chat_session(message.chat.id)
    current_session = user_session_manager.get_players(session)[-1]
    if not session or not current_session:
        return

    text, img = None, None
    if message.content_type == 'text':
        text = ' '.join(message.text.split(maxsplit=1)[1:]).strip() or ''
    elif message.caption and '/fact' in message.caption:
        text = message.caption.replace('/fact ', '') or ''

        file_info = bot.get_file(message.photo[len(message.photo) - 1].file_id)
        img = images.client.upload_from_url(
            'https://api.telegram.org/file/bot{0}/{1}'.format(
                tg_token, file_info.file_path),
            config={
                'album': session.album
            },
            anon=False).get('link')
    else:
        return

    sender = user_manager.get(message.from_user.id)

    if sender == current_session.user and (text or img):
        google_docs.add_data(document_id=session.document,
                             owner=sender.get_name(),
                             text=text.strip(),
                             image=img)
        bot.reply_to(message, session.hashtag())
Example #4
0
def process_session_choose(message):
    if message.text == 'Cancel':
        bot.reply_to(message, 'Okay.jpg', reply_markup=types.ReplyKeyboardRemove())
        return

    user_session = user_session_manager.get(message.text)
    msg = bot.reply_to(message, 'Send a save', reply_markup=types.ReplyKeyboardRemove())
    bot.register_next_step_handler(msg, process_get_file, user_session)
Example #5
0
def delete_session(message):
    if session_manager.delete_session(message.from_user.id, message.chat.id):
        bot.reply_to(message, 'Session deleted')
    else:
        bot.reply_to(
            message,
            'Failed to delete: there are no sessions created by you in this chat.'
        )
Example #6
0
def info(message):
    arg = ' '.join(message.text.split(maxsplit=1)[1:]).strip()
    session = get_session(arg) if arg else session_manager.active_chat_session(
        message.chat.id)

    if not session:
        bot.reply_to(message, 'There is nothing to show')
    else:
        bot.reply_to(message, info_message(session))
Example #7
0
def create_session(message):
    name = ' '.join(message.text.split(maxsplit=1)[1:]).strip() or 'Untitled'
    if session_manager.create_session(name, message.from_user.id,
                                      message.chat.id):
        bot.reply_to(message, 'Session created')
    else:
        bot.reply_to(
            message,
            'Failed to create: there is a session already created by you in this chat.'
        )
Example #8
0
def show_players(message):
    session = session_manager.active_chat_session(message.chat.id)
    players, cur = user_session_manager.get_players(session)
    reply_text = '\n'.join(f'{k}: {v.get_name()}' for k, v in players.items())
    reply_text = f'Players list:\n{reply_text}'
    if cur:
        reply_text += f'\nCurrent player: {cur.user.get_name()}\nCurrent step: {cur.position}'
    if players:
        bot.reply_to(message, reply_text)
    else:
        bot.reply_to(message, 'There are no players')
Example #9
0
def start_session(message):
    session = session_manager.active_chat_session(message.chat.id)
    if not session or session.status:
        return
    if session.id not in session_manager.get_player_sessions(
            message.from_user.id):
        return

    if session_manager.start(session.id):
        bot.reply_to(message, 'Strike the earth!')
    else:
        bot.reply_to(message, 'You are not prepared for a journey!')
Example #10
0
def stop_session(message):
    session = session_manager.active_chat_session(message.chat.id)
    if not session:
        return
    if session.id not in session_manager.get_player_sessions(
            message.from_user.id):
        return

    if session_manager.stop(session.id):
        bot.reply_to(message, 'Session was stopped')
    else:
        bot.reply_to(message, 'There is nothing to stop')
Example #11
0
def shuffle_players(message):
    session = session_manager.active_chat_session(message.chat.id)
    if not session:
        return
    if session.id not in session_manager.get_player_sessions(
            message.from_user.id):
        return

    if user_session_manager.shuffle_players(session):
        show_players(message)
    else:
        bot.reply_to(message, 'Failed to shuffle: there is no one to shuffle')
Example #12
0
def close_step(message):
    sessions = user_session_manager.all_player_active(message.from_user.id)
    if sessions:
        reply_text = '\n'.join([f'{k}: {v}' for k, v in sessions.items()])
        reply_text = f'Please chose one\n {reply_text}'
        session_select = types.ReplyKeyboardMarkup(one_time_keyboard=True, row_width=len(sessions))
        session_select.add(*[str(k) for k in sessions.keys()])
        session_select.add('Cancel')
        msg = bot.reply_to(message, reply_text, reply_markup=session_select)
        bot.register_next_step_handler(msg, process_session_choose)
    else:
        bot.reply_to(message, 'No active sessions')
Example #13
0
def close_round(message):
    shuffle = ' '.join(message.text.split(maxsplit=1)[1:]).strip() or None
    session = session_manager.active_chat_session(message.chat.id)
    if not session:
        return
    if session.id not in session_manager.get_player_sessions(
            message.from_user.id):
        return

    if user_session_manager.round(session.id, shuffle):
        bot.reply_to(message, 'Round was added')
    else:
        bot.reply_to(message, 'Cant make round')
Example #14
0
def rename_session(message):
    new_name = ' '.join(message.text.split(maxsplit=1)[1:]).strip()
    name = session_manager.rename(message.from_user.id, message.chat.id,
                                  new_name)
    if name:
        bot.reply_to(message, 'Session name: ' + name)
    elif new_name and not name:
        bot.reply_to(
            message,
            'Failed to change name: there is no session created by you in this chat.'
        )
    else:
        bot.reply_to(message, 'There is nothing to show')
Example #15
0
def description(message):
    new_desc = ' '.join(message.text.split(maxsplit=1)[1:]).strip() or None
    desc = session_manager.description(message.from_user.id, message.chat.id,
                                       new_desc)
    if desc:
        bot.reply_to(message, 'Session description: ' + desc)
    elif new_desc and not desc:
        bot.reply_to(
            message,
            'Failed to change description: there is no session created by you in this chat.'
        )
    else:
        bot.reply_to(message, 'There is nothing to show')
Example #16
0
def add_player(message):
    session = session_manager.active_chat_session(message.chat.id)
    if not session:
        return

    if session.id in session_manager.get_player_sessions(message.from_user.id):
        if message.reply_to_message:
            reply = message.reply_to_message
            if reply.from_user.is_bot:
                return
            to_add = user_manager.get(reply.from_user.id)
            if not to_add:
                bot.reply_to(message, 'Player must do /auth before adding!')
                return
            if user_session_manager.toggle_player(user_id=to_add,
                                                  session_id=session,
                                                  force_add=True):
                bot.reply_to(message, 'Player was added!')
            else:
                bot.reply_to(message, 'Something went wrong')
        else:
            bot.reply_to(message,
                         'You must reply to the id message for add that id!')
Example #17
0
def toggle_player(message):
    if message.from_user.is_bot:
        return
    session = session_manager.active_chat_session(message.chat.id)
    user_manager.add_user(id=message.from_user.id,
                          username=message.from_user.username,
                          first_name=message.from_user.first_name,
                          last_name=message.from_user.last_name)
    if session and session.status is None:
        if user_session_manager.toggle_player(session, message.from_user.id):
            bot.reply_to(message, 'You were added to the session game')
        else:
            bot.reply_to(message, 'You were deleted from the session game')
    else:
        bot.reply_to(
            message,
            'Failed to toggle you to the game: there is no game session.')