示例#1
0
    def send_post(self, destination):
        try:
            # Отправляем текст, нарезая при необходимости
            for text in cut_long_text(self.final_text):
                my_bot.send_message(
                    destination,
                    text,
                    parse_mode="HTML",
                    disable_web_page_preview=self.web_preview_url == '')

            # Отправляем отображаемые приложения к посту
            for url in self.gif_links:
                my_bot.send_document(destination, url)
            if len(self.image_links) > 0:
                my_bot.send_media_group(
                    destination,
                    [InputMediaPhoto(url) for url in self.image_links])
            if len(self.video_links) > 0:
                my_bot.send_media_group(
                    destination,
                    [InputMediaVideo(url) for url in self.video_links])
            for url in self.audio_links:
                my_bot.send_audio(destination, url)
        except apihelper.ApiException:
            action_log("VK Error: api exception")
示例#2
0
def kill_bot(message):
    if not hasattr(kill_bot, "check_sure"):
        kill_bot.check_sure = True
        return
    value_to_file(config.file_location['bot_killed'], 1)
    my_bot.send_document(message.chat.id, "https://t.me/mechmath/169445",
                         caption="Ухожу на отдых!", reply_to_message_id=message.message_id)
    user_action_log(message, "remotely killed bot.")
    os._exit(0)
示例#3
0
def admin_prize(message):
    if len(message.text.split()) > 1 and message.text.split()[1] == tokens.my_prize:
        all_imgs = os.listdir(config.prize_dir)
        rand_file = random.choice(all_imgs)
        your_file = open(config.prize_dir + rand_file, "rb")
        if rand_file.endswith(".gif"):
            my_bot.send_document(message.chat.id, your_file, reply_to_message_id=message.message_id)
        else:
            my_bot.send_photo(message.chat.id, your_file, reply_to_message_id=message.message_id)
        your_file.close()
        user_action_log(message, "got that prize:\n{0}".format(your_file.name))
示例#4
0
def wolfram_solver(message):
    """
    обрабатывает запрос и посылает пользователю картинку с результатом в случае удачи
    :param message:
    :return:
    """
    # сканируем и передаём всё, что ввёл пользователь после '/wolfram ' или '/wf '
    if not len(message.text.split()) == 1:
        my_bot.send_chat_action(message.chat.id, 'upload_photo')
        your_query = ' '.join(message.text.split()[1:])
        user_action_log(
            message,
            "entered this query for /wolfram:\n{0}".format(your_query))
        response = requests.get(
            "https://api.wolframalpha.com/v1/simple?appid=" + tokens.wolfram,
            params={'i': your_query})
        # если всё хорошо, и запрос найден
        if response.status_code == 200:
            img_original = Image.open(io.BytesIO(response.content))
            img_cropped = img_original.crop(
                (0, 95, 540, img_original.size[1] - 50))
            io_img = io.BytesIO()
            io_img.name = "wolfram {}.png".format(your_query.replace("/", "_"))
            img_cropped.save(io_img, format="png")
            io_img.seek(0)
            wolfram_max_ratio = 2.5
            if img_cropped.size[1] / img_cropped.size[0] > wolfram_max_ratio:
                my_bot.send_document(message.chat.id,
                                     io_img,
                                     reply_to_message_id=message.message_id)
            else:
                my_bot.send_photo(message.chat.id,
                                  io_img,
                                  reply_to_message_id=message.message_id)
            user_action_log(
                message,
                "has received this Wolfram output:\n{0}".format(response.url))
        # если всё плохо
        else:
            my_bot.reply_to(
                message, "Запрос не найдён.\nЕсли ты ввёл его на русском, "
                "то попробуй ввести его на английском.")
            user_action_log(message, "didn't received any data")
    # если пользователь вызвал /wolfram без аргумента
    else:
        my_bot.reply_to(
            message,
            "Использование: `/wolfram <запрос>` или `/wf <запрос>`",
            parse_mode="Markdown")
        user_action_log(message, "called /wolfram without any arguments")
示例#5
0
    def send_post(self, destination):
        try:
            # Отправляем текст, нарезая при необходимости
            for text in cut_long_text(self.final_text):
                my_bot.send_message(destination, text, parse_mode="HTML",
                                    disable_web_page_preview=self.web_preview_url == '')

            # Отправляем отображаемые приложения к посту
            for url in self.gif_links:
                my_bot.send_document(destination, url)
            if len(self.image_links) > 0:
                my_bot.send_media_group(destination, [InputMediaPhoto(url) for url in self.image_links])
            if len(self.video_links) > 0:
                my_bot.send_media_group(destination, [InputMediaVideo(url) for url in self.video_links])
            for url in self.audio_links:
                my_bot.send_audio(destination, url)
        except apihelper.ApiException:
            action_log("VK Error: api exception")
示例#6
0
    def send_post(self, destination):
        # Отправляем текст, нарезая при необходимости
        for text in cut_long_text(self.final_text):
            my_bot.send_message(
                destination,
                text,
                parse_mode="HTML",
                disable_web_page_preview=self.web_preview_url == '')

        # Отправляем отображаемые приложения к посту
        for url in self.video_links:
            my_bot.send_message(destination, url)
        for url in self.gif_links:
            my_bot.send_document(destination, url)
        for url in self.image_links:
            my_bot.send_photo(destination, url)
        for url in self.audio_links:
            my_bot.send_audio(destination, url)
示例#7
0
def kill_bot(message):
    if not hasattr(kill_bot, "check_sure"):
        kill_bot.check_sure = True
        return
    global_lock.acquire()
    try:
        file_killed_write = open(config.bot_killed_filename,
                                 'w',
                                 encoding='utf-8')
        file_killed_write.close()
    except RuntimeError:
        pass
    global_lock.release()

    my_bot.send_document(message.chat.id,
                         "https://t.me/mechmath/169445",
                         caption="Ухожу на отдых!",
                         reply_to_message_id=message.message_id)
    user_action_log(message, "remotely killed bot.")
    os._exit(0)
示例#8
0
def wolfram_solver(message):
    """
    обрабатывает запрос и посылает пользователю картинку с результатом в случае удачи
    :param message:
    :return:
    """
    # сканируем и передаём всё, что ввёл пользователь после '/wolfram ' или '/wf '
    if not len(message.text.split()) == 1:
        my_bot.send_chat_action(message.chat.id, 'upload_photo')
        your_query = ' '.join(message.text.split()[1:])
        user_action_log(message, "entered this query for /wolfram:\n{0}".format(your_query))
        response = requests.get("https://api.wolframalpha.com/v1/simple?appid=" + tokens.wolfram,
                                params={'i': your_query})
        # если всё хорошо, и запрос найден
        if response.status_code == 200:
            img_original = Image.open(io.BytesIO(response.content))
            img_cropped = img_original.crop((0, 95, 540, img_original.size[1] - 50))
            io_img = io.BytesIO()
            io_img.name = "wolfram {}.png".format(your_query.replace("/", "_"))
            img_cropped.save(io_img, format="png")
            io_img.seek(0)
            wolfram_max_ratio = 2.5
            if img_cropped.size[1] / img_cropped.size[0] > wolfram_max_ratio:
                my_bot.send_document(message.chat.id, io_img,
                                     reply_to_message_id=message.message_id)
            else:
                my_bot.send_photo(message.chat.id, io_img,
                                  reply_to_message_id=message.message_id)
            user_action_log(message, "has received this Wolfram output:\n{0}".format(response.url))
        # если всё плохо
        else:
            my_bot.reply_to(message,
                            "Запрос не найдён.\nЕсли ты ввёл его на русском, "
                            "то попробуй ввести его на английском.")
            user_action_log(message, "didn't received any data")
    # если пользователь вызвал /wolfram без аргумента
    else:
        my_bot.reply_to(message, "Использование: `/wolfram <запрос>` или `/wf <запрос>`", parse_mode="Markdown")
        user_action_log(message, "called /wolfram without any arguments")
示例#9
0
def my_kek(message):
    """
    открывает соответствующие файл и папку, кидает рандомную строчку из файла, или рандомную картинку или гифку из папки
    :param message:
    :return:
    """
    if not hasattr(my_kek, "kek_bang"):
        my_kek.kek_bang = time.time()
    if not hasattr(my_kek, "kek_crunch"):
        my_kek.kek_crunch = my_kek.kek_bang + 60 * 60
    if not hasattr(my_kek, "kek_enable"):
        my_kek.kek_enable = True
    if not hasattr(my_kek, "kek_counter"):
        my_kek.kek_counter = 0
    if not hasattr(weather.my_weather, "weather_bold"):
        weather.my_weather.weather_bold = False

    kek_init = True

    user_action_log(message, "asked for kek")
    if message.chat.id == int(config.mm_chat):
        if my_kek.kek_counter == 0:
            my_kek.kek_bang = time.time()
            my_kek.kek_crunch = my_kek.kek_bang + 60 * 60
            my_kek.kek_counter += 1
            kek_init = True
        elif (my_kek.kek_counter >= config.limit_kek
              and time.time() <= my_kek.kek_crunch):
            kek_init = False
        elif time.time() > my_kek.kek_crunch:
            my_kek.kek_counter = -1
            kek_init = True

    flood_count(message)
    if not (kek_init and my_kek.kek_enable):
        return
    if message.chat.id == config.mm_chat:
        my_kek.kek_counter += 1
    your_destiny = random.randint(1, 30)  # если при вызове не повезло, то кикаем из чата
    if your_destiny == 13 and str(message.chat.id) == config.mm_chat:
        user_action_log(message, "is unlucky and got banhammer kek")
        my_bot.reply_to(message,
                        "Предупреждал же, что кикну. "
                        "Если не предупреждал, то ")
        my_bot.send_document(message.chat.id, config.gif_links[0],
                             reply_to_message_id=message.message_id)
        try:
            if int(message.from_user.id) in config.admin_ids:
                my_bot.reply_to(message, "... Но против хозяев не восстану.")
                user_action_log(message, "can't be kicked out")
            else:
                # кикаем кекуна из чата (можно ещё добавить условие, что если один юзер прокекал больше числа n
                # за время t, то тоже в бан)
                release_time = ro_roll(
                        "Эй, {}.\n".format(
                                message.from_user.first_name) + "Твой /kek обеспечил тебе {} мин. бана. Поздравляю!",
                        chat_id=message.chat.id, max_time=15)

                user_action_log(message, "sleeping before ban")
                time.sleep(5)
                my_bot.kick_chat_member(message.chat.id, message.from_user.id, until_date=release_time)
                user_action_log(message, "has been kicked out until {}".format(release_time))
        except Exception as ex:
            logging.exception(ex)
            pass
    else:
        type_of_kek = random.randint(1, 33)
        # 1/33 шанс на картинку или гифку
        if type_of_kek == 9:
            all_imgs = os.listdir(config.kek_dir)
            rand_file = random.choice(all_imgs)
            your_file = open(config.kek_dir + rand_file, "rb")
            if rand_file.endswith(".gif"):
                my_bot.send_document(message.chat.id, your_file,
                                     reply_to_message_id=message.message_id)
            else:
                my_bot.send_photo(message.chat.id, your_file,
                                  reply_to_message_id=message.message_id)
            your_file.close()
            user_action_log(message,
                            "got that kek:\n{0}".format(your_file.name))
        elif type_of_kek == 10:
            my_bot.send_document(message.chat.id, random.choice(config.gif_links),
                                 reply_to_message_id=message.message_id)
        elif type_of_kek < 10:
            file_kek = open(config.file_location['kek_file_ids'], 'r', encoding='utf-8')
            # while your_kek == '\n':
            your_kek = random.choice(file_kek.readlines())
            # если попалась строчка вида '<sticker>ID', то шлём стикер по ID
            if str(your_kek).startswith("<sticker>"):
                sticker_id = str(your_kek[9:]).strip()
                my_bot.send_sticker(message.chat.id, sticker_id, reply_to_message_id=message.message_id)
            # если попалась строчка вида '<audio>ID', то шлём аудио по ID
            elif str(your_kek).startswith("<audio>"):
                audio_id = str(your_kek[7:]).strip()
                my_bot.send_audio(message.chat.id, audio_id, reply_to_message_id=message.message_id)
            # если попалась строчка вида '<voice>ID', то шлём голосовое сообщение по ID
            elif str(your_kek).startswith("<voice>"):
                voice_id = str(your_kek[7:]).strip()
                my_bot.send_voice(message.chat.id, voice_id, reply_to_message_id=message.message_id)
            user_action_log(message,
                            "got that kek:\n{0}".format(str(your_kek).replace("<br>", "\n")[:35]))
        # иначе смотрим файл
        else:
            your_kek = ''
            file_kek = open(config.file_location['/kek'], 'r', encoding='utf-8')
            while your_kek == '':
                your_kek = random.choice(file_kek.readlines())
            my_bot.reply_to(message,
                            str(your_kek).replace("<br>", "\n"))
            file_kek.close()
            user_action_log(message,
                            "got that kek:\n{0}".format(str(your_kek).replace("<br>", "\n")[:35]))

    if my_kek.kek_counter == config.limit_kek - 10:
        time_remaining = divmod(int(my_kek.kek_crunch) - int(time.time()),
                                60)
        my_bot.reply_to(message,
                        "<b>Внимание!</b>\nЭтот чат может покекать "
                        "ещё не более {0} раз до истечения кекочаса "
                        "(через {1} мин. {2} сек.).\n"
                        "По истечению кекочаса "
                        "счётчик благополучно сбросится.".format(config.limit_kek - my_kek.kek_counter,
                                                                 time_remaining[0], time_remaining[1]),
                        parse_mode="HTML")
    if my_kek.kek_counter == config.limit_kek - 1:
        time_remaining = divmod(int(my_kek.kek_crunch) - int(time.time()), 60)
        my_bot.reply_to(message,
                        "<b>EL-FIN!</b>\n"
                        "Теперь вы сможете кекать "
                        "только через {0} мин. {1} сек.".format(time_remaining[0], time_remaining[1]),
                        parse_mode="HTML")
    my_kek.kek_counter += 1