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)
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)}')
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())
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)
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.' )
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))
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.' )
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')
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!')
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')
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')
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')
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')
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')
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')
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!')
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.')