Ejemplo n.º 1
0
def channels_management(bot: Bot, user_data: dict):
    bot.send_message(chat_id=user_data["chat_id"],
                     text="Управление заданиями. Выберите тип задания:",
                     reply_markup=ReplyKeyboardMarkup(
                         [["Подписка на канал"], ["Назад"]],
                         resize_keyboard=True))
    return -2
Ejemplo n.º 2
0
def error_during_delay_parsing(bot: Bot, user_data: dict):
    bot.send_message(
        chat_id=user_data["chat_id"],
        text="Пожалуйста, соблюдайте формат:\n"
             "[% Количество дней % д] [% Колисество часов % ч] [% Количество минут % м]\n"
    )
    return -13
Ejemplo n.º 3
0
def error_during_channel_deleting(bot: Bot, user_data: dict, next_callable):
    bot.send_message(
        chat_id=user_data["chat_id"],
        text=
        "Ошибка при удалении канала. Возможные причины: канал не существует, ссылка введена "
        "неправильно или он уже был удален ранее. Попробуйте снова:")
    return next_callable(bot, user_data)
Ejemplo n.º 4
0
def error_during_adlink_deleting(bot: Bot, user_data: dict):
    bot.send_message(
        chat_id=user_data["chat_id"],
        text=
        "Ссылок с таким ключевым словом не найдено. Проверьте правильность написания."
    )
    return -12
Ejemplo n.º 5
0
def callback_query_constructor_callback(bot: Bot, update: Update, user_data: dict):
    prepare_user_data(update, user_data)

    delete_keyboard = True
    new_state = None
    if user_data["node"] == -10:
        if update.callback_query.data == "add_buttons":
            new_state = adding_inline_keyboard_hint(bot, user_data)
        elif update.callback_query.data == "del_buttons":
            save_post_draft(user_data, update.callback_query.message.to_json())
            new_state = post_preview(bot, user_data)
    elif user_data["node"] == -11:
        if update.callback_query.data == "cancel":
            new_state = post_preview(bot, user_data)
    elif user_data["node"] == -12:
        if update.callback_query.data == "publish":
            save_post(user_data, 0)
            broadcast_post(bot, copy.deepcopy(user_data), *parse_post_to_send(user_data["post_id"]))
            del user_data["post_id"]
            destruct_constructor_handlers(user_data)
            new_state = broadcast_post_hint(bot, user_data)
        elif update.callback_query.data == "delay":
            new_state = delay_post_broadcasting(bot, user_data)
        elif update.callback_query.data == "go_back":
            new_state = post_preview(bot, user_data)

    if new_state is not None:
        set_state(user_data["id"], user_data, new_state)
        if delete_keyboard:
            bot.edit_message_reply_markup(message_id=update.callback_query.message.message_id,
                                          chat_id=user_data["chat_id"])

    bot.answer_callback_query(update.callback_query.id)
    raise DispatcherHandlerStop
Ejemplo n.º 6
0
def broadcast_post_hint(bot: Bot, user_data: dict):
    bot.send_message(
        chat_id=user_data["chat_id"],
        text="Рассылка началась или начнется в запланированное время. Ввиду ограничения telegram на"
             "рассылку сообщений ботами, процесс может проходить не так быстро, как вы ожидаете. После"
             "окончания рассылки вы получите уведомление."
    )
    return admin_welcome(bot, user_data)
Ejemplo n.º 7
0
def error_during_channel_adding(bot: Bot, user_data: dict, next_callable):
    bot.send_message(
        chat_id=user_data["chat_id"],
        text=
        "Ошибка при добавлении канала. Возможные причины: канал не существует, ссылка введена "
        "неправильно, он уже был добавлен ранее или бот не имеет прав администратора в канале. Попробуйте снова:"
    )
    return next_callable(bot, user_data)
Ejemplo n.º 8
0
def delete_ad_link(bot: Bot, user_data: dict):
    bot.send_message(chat_id=user_data["chat_id"],
                     text="Удаление ссылки. Введите ключевое слово:",
                     reply_markup=ReplyKeyboardMarkup(
                         [["Назад"]],
                         resize_keyboard=True,
                     ))
    return -12
Ejemplo n.º 9
0
def empty_msg(bot: Bot, user_data: dict, next_state, additional_text=""):
    assert type(additional_text) == str

    bot.send_message(
        chat_id=user_data["chat_id"],
        text=f"< < Пустое сообщение > >\n{additional_text}"
    )
    return next_state
Ejemplo n.º 10
0
def admin_welcome(bot: Bot, user_data: dict):
    bot.send_message(
        chat_id=user_data["chat_id"],
        text="Добро пожаловать в интерфейс администратора, выберите действие:",
        reply_markup=ReplyKeyboardMarkup(
            [["Статистика"], ["Рассылка", 'Задания'], ["Рекламная рефералка"],
             ["Загрузить ключи"], ["Выход из админки"]],
            resize_keyboard=True))
    return -1
Ejemplo n.º 11
0
def ad_link_added(bot: Bot, user_data: dict, adlink_id):
    adlink = get_adlink(adlink_id)
    href = get_adlink_href(adlink.uuid)
    bot.send_message(
        chat_id=user_data["chat_id"],
        text=f'<a href="{href}">{adlink.keyword}</a>\n'
        f'"Сырая" ссылка: {href}',
        parse_mode=ParseMode.HTML,
    )
    return admin_welcome(bot, user_data)
Ejemplo n.º 12
0
def delay_post_broadcasting(bot: Bot, user_data: dict):
    bot.send_message(
        chat_id=user_data["chat_id"],
        text="На сколько задержать рассылку поста?\n"
             "Отправьте сообщение в формате:\n"
             "[% Количество дней % д] [% Колисество часов % ч] [% Количество минут % м]\n"
             "Например: 2 д 3 ч 30 м -- задержка на 2 дня и 3,5 часа\n"
             "90 м -- задержка на 90 минут (эквивалент 1 ч 30 м)"
    )
    return -13
Ejemplo n.º 13
0
def sending_post_settings(bot: Bot, user_data: dict):
    bot.send_message(
        chat_id=user_data["chat_id"],
        text="Сообщение готово к публикации, хотите начать рассылку прямо сейчас или отложить?",
        reply_markup=InlineKeyboardMarkup([
            [InlineKeyboardButton(text="Опубликовать", callback_data="publish"),
             InlineKeyboardButton(text="Отложить", callback_data="delay")],
            [InlineKeyboardButton(text="<< Назад", callback_data="go_back")]
        ])
    )
    return -12
Ejemplo n.º 14
0
def adding_inline_keyboard_hint(bot: Bot, user_data: dict):
    bot.send_message(
        chat_id=user_data["chat_id"],
        text="Чтобы добавить inline-клавиатуру к сообщению, отправьте ссылки в следующем формате:\n"
             "Название кнопки 1 - ссылка 1\n"
             "Название кнопки 2 - ссылка 2\n"
             "И так далее...\n\n"
             "Например:\n"
             "YouTube - https://youtube.com/\n",
        reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text="Отмена", callback_data="cancel")]])
    )
    return -11
Ejemplo n.º 15
0
def ad_link_menu(bot: Bot, user_data: dict):
    adlinks = get_adlinks()
    if len(adlinks) == 0:
        text = "Список реферальных рекламных ссылок пуст"
    else:
        text = markup_adlinks(adlinks)

    bot.send_message(chat_id=user_data["chat_id"],
                     text=text,
                     parse_mode=ParseMode.HTML,
                     reply_markup=ReplyKeyboardMarkup(
                         [["Добавить"], ["Удалить"], ["Назад"]],
                         resize_keyboard=True))
    return -10
Ejemplo n.º 16
0
def post_constructor_first_step(bot: Bot, user_data: dict):
    prepare_constructor_handlers(user_data)
    bot.send_message(
        chat_id=user_data["chat_id"],
        text="Отправьте боту то, что хотите опубликовать. Это может быть всё, что угодно --"
             "текст, фото, видео, даже стикеры. Однако, из-за ограничений telegram в сообщении может быть"
             "не более одного вложения (фото + текст, видео + текст, и т. д.), причем в некоторых случаях"
             "(стикеры) может быть ТОЛЬКО вложение, без текста.",
        reply_markup=ReplyKeyboardMarkup([
            ["Очистить", "Предпросмотр"],
            ["Отменить", "Далее"],
        ], resize_keyboard=True)
    )
    return -9
Ejemplo n.º 17
0
def admin_statistics(bot: Bot, user_data: dict):
    bot.send_message(
        chat_id=user_data["chat_id"],
        text=
        "Всего пользователей: {all_users}\nАктивных (за прошедшую неделю): {active}\n"
        "Приглашенных через систему рефералов: {ref_count}\n"
        "Ключей осталось: {keys_active}\nКлючей раздали: {keys_gets}".format(
            all_users=get_all_users_count(),
            active=get_active_users_count(),
            ref_count=get_referral_links_count(),
            keys_active=get_count_keys(),
            keys_gets=0) + "\n\nРекламные ссылки:\n" +
        adlinks_statistics_markup(),
        parse_mode=ParseMode.HTML)
    return -1
Ejemplo n.º 18
0
def check_subscription(bot: Bot, user_data: dict, channel_id: int):
    try:
        result = bot.get_chat_member(chat_id=channel_id,
                                     user_id=user_data["id"])
    except err.TelegramError as e:
        return False
    return result.status != result.LEFT and result.status != result.KICKED
Ejemplo n.º 19
0
def try_delete_channel(bot: Bot, candidate: str, channel_model_class):
    if candidate[0] != "@":
        candidate = "@" + candidate

    try:
        channel = bot.get_chat(chat_id=candidate)
    except err.TelegramError as e:
        return False

    if channel.type != "channel":
        return False

    session = db.Session()
    if session.query(channel_model_class).filter_by(
            id=channel.id).count() == 0:
        # already deleted
        session.close()
        return False

    if channel_model_class is ChannelToSubscribe:
        session.query(channel_model_class).get(channel.id).enabled = False
    else:
        session.query(channel_model_class).filter_by(id=channel.id).delete()

    session.commit()
    session.close()

    return True
Ejemplo n.º 20
0
def channels_for_subscription_list(bot: Bot, user_data: dict):
    channels = get_channels_for_subscription()
    if len(channels) == 0:
        bot.send_message(chat_id=user_data["chat_id"],
                         text="Список каналов для подписки пуст.",
                         reply_markup=ReplyKeyboardMarkup(
                             [["Добавить канал"], ["Назад"]],
                             resize_keyboard=True))
    else:
        bot.send_message(
            chat_id=user_data["chat_id"],
            text="Каналы для подписки:\n\n"
            "{channels_repr}".format(
                channels_repr=markup_channels_list(bot, channels)),
            reply_markup=ReplyKeyboardMarkup([
                ["Добавить канал"],
                ["Удалить канал"],
                ["Назад"],
            ],
                                             resize_keyboard=True))

    return -6
Ejemplo n.º 21
0
def try_add_channel(bot: Bot, candidate: str, channel_model_class):
    if candidate[0] != "@":
        candidate = "@" + candidate

    try:
        channel = bot.get_chat(chat_id=candidate)
    except err.TelegramError:
        return False

    if channel.type != "channel":
        return False

    chat_member = bot.get_chat_member(chat_id=candidate, user_id=bot.id)
    if chat_member.status not in (chat_member.ADMINISTRATOR,
                                  chat_member.CREATOR):
        return False

    session = db.Session()
    if session.query(channel_model_class).filter_by(id=channel.id).count() > 0:

        if channel_model_class is ChannelToSubscribe:
            session.query(channel_model_class).get(channel.id).enabled = True
            session.commit()
            session.close()
            return True

        # already exists
        session.close()
        return False

    new_channel = channel_model_class(id=channel.id)
    session.add(new_channel)
    session.commit()
    session.close()

    return True
Ejemplo n.º 22
0
def error_during_buttons_adding(bot: Bot, user_data: dict):
    bot.send_message(
        chat_id=user_data["chat_id"],
        text="Ошибка при добавлении кнопок. Проверьте соблюдение формата и/или корректность ссылок\n\n"
    )
    return -11
Ejemplo n.º 23
0
def ad_keys(bot: Bot, user_data: dict):
    bot.send_message(chat_id=user_data["chat_id"],
                     text="Отправьте боту файл с ключами",
                     reply_markup=ReplyKeyboardMarkup([["Отмена"]],
                                                      resize_keyboard=True))
    return -16
Ejemplo n.º 24
0
def delete_channel_for_subscription_first_step(bot: Bot, user_data: dict):
    bot.send_message(
        chat_id=user_data["chat_id"],
        text="Отправьте сюда адрес канала (@example или просто example)",
        reply_markup=ReplyKeyboardMarkup([["Отмена"]], resize_keyboard=True))
    return -8
Ejemplo n.º 25
0
from telegram.utils.request import Request
from telegram.ext.messagequeue import MessageQueue
from telegram.ext import Updater

from settings import REQUEST_KWARGS, TOKEN
from queued_bot import Bot

if REQUEST_KWARGS is not None:
    request = Request(con_pool_size=16, **REQUEST_KWARGS)
else:
    request = Request(con_pool_size=16)

bot = Bot(token=TOKEN,
          mqueue=MessageQueue(all_burst_limit=26, all_time_limit_ms=1100),
          request=request)

updater = Updater(bot=bot, workers=16)
dispatcher = updater.dispatcher
job_queue = updater.job_queue
Ejemplo n.º 26
0
def channel_deleted_succsessfully(bot: Bot, user_data: dict, next_callable):
    bot.send_message(
        chat_id=user_data["chat_id"],
        text="Канал успешно удален.",
    )
    return next_callable(bot, user_data)
Ejemplo n.º 27
0
def kek(bot: Bot, user_data: dict, text):
    bot.send_message(
        chat_id=user_data["chat_id"],
        text='Не работает или работает? {text}'.format(text=repr(text)))
Ejemplo n.º 28
0
def ad_link_deleted(bot: Bot, user_data: dict):
    bot.send_message(chat_id=user_data["chat_id"], text="Ссылка удалена.")
    return ad_link_menu(bot, user_data)