def change_language(update: Update, context: CallbackContext): user_data = context.user_data user_id = update.effective_user.id if "lang" not in user_data: lang = database.get_language_player(user_id) user_data["lang"] = lang else: lang = user_data["lang"] current_lang = database.get_language_player(user_id) languages = get_languages() current_language = languages[current_lang] buttons = private_helpers.language_buttons(languages) update.effective_message.reply_text(get_string(lang, "private_language").format(current_language), reply_markup=InlineKeyboardMarkup(buttons))
def private_stats(update: Update, context: CallbackContext): user_data = context.user_data if "lang" not in user_data: user_data["lang"] = database.get_language_player( update.effective_user.id) player = database.get_player(update.effective_user.id) all_arguments = stats_arguments(player, update) text = get_string(user_data["lang"], "private_stats_text").format(*all_arguments) result_article = InlineQueryResultArticle( id=uuid4(), title=get_string(user_data["lang"], "private_stats_title"), description=get_string(user_data["lang"], "private_stats_description"), input_message_content=InputTextMessageContent(message_text=text, parse_mode="HTML")) if "old_games_played" in player.keys(): text += get_string(user_data["lang"], "private_old_stats") result_article.input_message_content.message_text = text result_article.reply_markup = InlineKeyboardMarkup([[ InlineKeyboardButton( get_string(user_data["lang"], "private_old_button"), "https://t.me/TheChameleonBot?start=stats") ]]) results = [result_article] update.inline_query.answer(results)
def private_stats_command(update: Update, context: CallbackContext): user_data = context.user_data if "lang" not in user_data: user_data["lang"] = database.get_language_player( update.effective_user.id) player = database.get_player(update.effective_user.id) all_arguments = stats_arguments(player, update) text = get_string(user_data["lang"], "private_stats_text").format(*all_arguments) if "old_games_played" not in player.keys(): update.effective_message.reply_html(text) return all_games = player["old_games_played"] + player["games_played"] won_per = percentage(player["old_games_won"], player["old_games_played"]) all_won = player["old_games_won"] + player["games_won"] all_won_per = percentage(all_won, all_games) lost = player["old_games_played"] - player["old_games_won"] all_lost = all_games - all_won start_per = percentage(player["old_starter"], player["old_games_played"]) all_start = player["starter"] + player["old_starter"] all_start_per = percentage(all_start, all_games) cham_per = percentage(player["old_been_chameleon"], player["old_games_played"]) all_cham = player["old_been_chameleon"] + player["been_chameleon"] all_cham_per = percentage(all_cham, all_games) all_arguments = [ player["old_games_played"], all_games, player["old_games_won"], won_per, all_won, all_won_per, lost, all_lost, player["old_starter"], start_per, all_start, all_start_per, player["old_been_chameleon"], cham_per, all_cham, all_cham_per ] text += get_string(user_data["lang"], "private_old_stats_command").format(*all_arguments) update.effective_message.reply_html(text)
def error_handler(update: Update, context: CallbackContext): chat = update.effective_chat if chat.type == "private": if "lang" not in context.user_data: context.user_data["lang"] = database.get_language_player(update.effective_user.id) lang = context.user_data["lang"] else: if "lang" not in context.chat_data: context.chat_data["lang"] = database.get_language_chat(update.effective_chat.id) lang = context.chat_data["lang"] if update.callback_query: update.callback_query.answer(get_string(lang, "error"), show_alert=True) else: update.effective_message.reply_text(get_string(lang, "error")) payload = "" # normally, we always have an user. If not, its either a channel or a poll update. if update.effective_user: payload += f' with the user {mention_html(update.effective_user.id, update.effective_user.first_name)}' # there are more situations when you don't get a chat if update.effective_chat: payload += f' within the chat <i>{update.effective_chat.title}</i>' if update.effective_chat.username: payload += f' (@{update.effective_chat.username})' # but only one where you have an empty payload by now: A poll (buuuh) if update.poll: payload += f' with the poll id {update.poll.id}.' text = f"Oh no. The error <code>{context.error}</code> happened{payload}. The type of the chat is " \ f"<code>{chat.type}</code>. The current user data is <code>{context.user_data}</code>, the chat data " \ f"<code>{context.chat_data}</code>." context.bot.send_message(208589966, text, parse_mode=ParseMode.HTML) raise
def start(update: Update, context: CallbackContext): user_data = context.user_data if "lang" not in user_data: user_data["lang"] = database.get_language_player(update.effective_user.id) if context.args: return update.effective_message.reply_text(get_string(user_data["lang"], "greeting_private"))
def help_message(update: Update, context: CallbackContext): user_data = context.user_data if "lang" not in user_data: user_data["lang"] = database.get_language_player( update.effective_user.id) update.effective_message.reply_text( get_string(user_data["lang"], "help_private"))
def wrapper(*args, **kwargs): update = args[0] context = args[1] user_id = update.effective_user.id user_data = context.user_data if "lang" not in user_data: lang = database.get_language_player(user_id) user_data["lang"] = lang else: lang = user_data["lang"] query = update.callback_query chat_id = int(query.data.split("_")[1]) try: chat = context.bot.get_chat(chat_id) except BadRequest: new_chat_id = database.get_new_id(chat_id) if new_chat_id: chat = context.bot.get_chat(chat_id) else: query.edit_message_text(get_string(lang, "group_not_found")) return if not helpers.is_admin(context.bot, update.effective_user.id, chat): query.edit_message_text(get_string(lang, "no_admin_settings")) return return func(*args, **kwargs)
def settings_help(update: Update, context: CallbackContext): user_data = context.user_data if "lang" not in user_data: user_data["lang"] = database.get_language_player(update.effective_user.id) lang = user_data["lang"] buttons = private_helpers.help_buttons(get_string(lang, "group_setting_buttons"), None) update.effective_message.reply_text(get_string(lang, "settings_help"), reply_markup=InlineKeyboardMarkup(buttons))
def deck(update: Update, context: CallbackContext): user_data = context.user_data if "lang" not in user_data: user_data["lang"] = database.get_language_player(update.effective_user.id) lang = user_data["lang"] here = get_string(lang, "here") decks_link = f"<a href=\"{DECKS_LINK}\">{here}</a>" group_link = f"<a href=\"{TRANSLATION_CHAT_LINK}\">{here}</a>" update.effective_message.reply_html(get_string(lang, "deck").format(decks_link, group_link))
def translation(update: Update, context: CallbackContext): user_data = context.user_data if "lang" not in user_data: user_data["lang"] = database.get_language_player(update.effective_user.id) lang = user_data["lang"] here = get_string(lang, "here") translations_link = f"<a href=\"{TRANSLATIONS_LINK}\">{here}</a>" html_style_link = f"<a href=\"{HTML_STYLE_LINK}\">{here}</a>" group_link = f"<a href=\"{TRANSLATION_CHAT_LINK}\">{here}</a>" update.effective_message.reply_html(get_string(lang, "translation").format(translations_link, html_style_link, group_link))
def game_rules(update: Update, context: CallbackContext): if update.effective_chat.type == "private": if "lang" not in context.user_data: context.user_data["lang"] = database.get_language_player( update.effective_user.id) lang = context.user_data["lang"] else: if "lang" not in context.chat_data: context.chat_data["lang"] = database.get_language_chat( update.effective_chat.id) lang = context.chat_data["lang"] update.effective_message.reply_html(get_string(lang, "rules"))
def settings_help_edit(update: Update, context: CallbackContext): user_data = context.user_data if "lang" not in user_data: user_data["lang"] = database.get_language_player(update.effective_user.id) lang = user_data["lang"] query = update.callback_query data = query.data.split("_") chosen = data[1] refresh_id = 1 if int(data[2]) != 0: refresh_id = 0 buttons = private_helpers.help_buttons(get_string(lang, "group_setting_buttons"), chosen, refresh_id) query.edit_message_text(get_string(lang, f"{chosen}_help"), reply_markup=InlineKeyboardMarkup(buttons), parse_mode=ParseMode.HTML, disable_web_page_preview=True)
def start(update: Update, context: CallbackContext): user_id = update.effective_user.id database.insert_player_pm(user_id, True) user_data = context.user_data if "lang" not in user_data: lang = database.get_language_player(user_id) user_data["lang"] = lang else: lang = user_data["lang"] context.args = context.args[0].split("_") if context.args else None if not context.args or context.args[0] != "settings": return # not necessary, but pycharm won't believe me that... chat_id = 0 try: chat_id = int(context.args[1]) chat = context.bot.get_chat(chat_id) except ValueError: context.bot.send_message(user_id, get_string(lang, "group_not_found")) return except BadRequest: try: new_id = database.get_new_id(chat_id) if new_id: chat = context.bot.get_chat(int(new_id)) else: raise BadRequest except BadRequest: context.bot.send_message(user_id, get_string(lang, "group_not_found")) return database.insert_group_title(chat_id, chat.title, chat.link) if not helpers.is_admin(context.bot, update.effective_user.id, chat): update.effective_message.reply_text( get_string(lang, "no_admin_settings")) return buttons = group_settings_helpers.group_settings_buttons( get_string(lang, "group_setting_buttons"), chat_id) chat_link = helpers.chat_link(chat.title, chat.link) context.bot.send_message(user_id, get_string( lang, "group_setting_text").format(chat_link), reply_markup=InlineKeyboardMarkup(buttons), parse_mode=ParseMode.HTML, disable_web_page_preview=True)
def error_handler(update: Update, context: CallbackContext): if not update: text = "Hey jo, error outside of update, The full traceback:\n\n < code > {trace} < / code > " context.bot.send_message(208589966, text, parse_mode=ParseMode.HTML) return # trying to hunt down a bug here if update.effective_message: logger.info( f"This is the message received: {update.effective_message.text}") chat = update.effective_chat if chat.type == "private": if "lang" not in context.user_data: context.user_data["lang"] = database.get_language_player( update.effective_user.id) lang = context.user_data["lang"] else: if "lang" not in context.chat_data: context.chat_data["lang"] = database.get_language_chat( update.effective_chat.id) lang = context.chat_data["lang"] if update.callback_query: update.callback_query.answer(get_string(lang, "error"), show_alert=True) else: update.effective_message.reply_text(get_string(lang, "error")) payload = "" # normally, we always have an user. If not, its either a channel or a poll update. if update.effective_user: payload += f' with the user {mention_html(update.effective_user.id, update.effective_user.first_name)}' # there are more situations when you don't get a chat if update.effective_chat: payload += f' within the chat <i>{update.effective_chat.title}</i>' if update.effective_chat.username: payload += f' (@{update.effective_chat.username})' # but only one where you have an empty payload by now: A poll (buuuh) if update.poll: payload += f' with the poll id {update.poll.id}.' trace = "".join(traceback.format_tb(sys.exc_info()[2])) text = f"Oh no. The error <code>{context.error}</code> happened{payload}. The type of the chat is " \ f"<code>{chat.type}</code>. The current user data is <code>{context.user_data}</code>, the chat data " \ f"<code>{context.chat_data}</code>.\nThe full traceback:\n\n<code>{trace}</code>" context.bot.send_message(208589966, text, parse_mode=ParseMode.HTML) raise
def settings_help_edit(update: Update, context: CallbackContext): user_data = context.user_data if "lang" not in user_data: user_data["lang"] = database.get_language_player( update.effective_user.id) lang = user_data["lang"] query = update.callback_query data = query.data.split("_") chosen = data[1] help_text = get_string(lang, f"{chosen}_help") if html.unescape(query.message.text_html) == help_text: query.answer() return buttons = private_helpers.help_buttons( get_string(lang, "group_setting_buttons"), chosen) query.edit_message_text(help_text, reply_markup=InlineKeyboardMarkup(buttons), parse_mode=ParseMode.HTML, disable_web_page_preview=True) query.answer()
def group_setting(update: Update, context: CallbackContext): chat_id = update.effective_chat.id lang = database.get_language_chat(chat_id) if not helpers.is_admin(context.bot, update.effective_user.id, update.effective_chat): update.effective_message.reply_text( get_string(lang, "no_admin_settings")) return user_id = update.effective_user.id user_lang = database.get_language_player(user_id) pm = database.get_pm_player(user_id) context.user_data["lang"] = user_lang database.insert_group_title(chat_id, update.effective_chat.title, update.effective_chat.link) if pm: try: # yes, its not a string, I don't change the functions name for this you f****r chat_link = helpers.chat_link(update.effective_chat.title, update.effective_chat.link) buttons = group_settings_helpers.group_settings_buttons( get_string(user_lang, "group_setting_buttons"), chat_id) context.bot.send_message( user_id, get_string(user_lang, "group_setting_text").format(chat_link), reply_markup=InlineKeyboardMarkup(buttons), parse_mode=ParseMode.HTML, disable_web_page_preview=True) # this means the bot was blocked wtf except Unauthorized: update.effective_message.reply_text( get_string(lang, "admin_blocked_bot")) database.insert_player_pm(user_id, False) else: button = [[ InlineKeyboardButton( get_string(lang, "no_pm_settings_button"), url=f"https://t.me/thechameleonbot?start=settings_{chat_id}") ]] update.effective_message.reply_text( get_string(lang, "no_pm_settings"), reply_markup=InlineKeyboardMarkup(button))