コード例 #1
0
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))
コード例 #2
0
ファイル: stats.py プロジェクト: jasperazerbaijan/Chame
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)
コード例 #3
0
ファイル: stats.py プロジェクト: jasperazerbaijan/Chame
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)
コード例 #4
0
ファイル: dev.py プロジェクト: enteryournamehere/Chameleon
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
コード例 #5
0
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"))
コード例 #6
0
ファイル: private.py プロジェクト: jasperazerbaijan/Chame
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"))
コード例 #7
0
 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)
コード例 #8
0
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))
コード例 #9
0
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))
コード例 #10
0
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))
コード例 #11
0
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"))
コード例 #12
0
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)
コード例 #13
0
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)
コード例 #14
0
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
コード例 #15
0
ファイル: private.py プロジェクト: jasperazerbaijan/Chame
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()
コード例 #16
0
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))