class TelegraphPost:
    def __init__(self, short_name, author_name):
        self.telegraph = Telegraph()
        self.__SHORT_NAME = short_name
        self.__AUTHOR_NAME = author_name
        self.__TELEGRAPH_TOKEN = self.create_acc()
        self.__TEMPLATE_ENV = Environment(loader=FileSystemLoader(
            searchpath="api/templates"))

    def create_acc(self):
        self.telegraph.create_account(short_name=self.__SHORT_NAME,
                                      author_name=self.__AUTHOR_NAME)
        telegraph_token = self.telegraph.get_access_token()
        return telegraph_token

    def create_post(self, rom_name, device, changelog, rom_pic):
        template = self.__TEMPLATE_ENV.get_template("template.html")
        html_content = template.render(rom_pic=rom_pic,
                                       rom_name=rom_name,
                                       changelog=changelog,
                                       device=device)
        title = f"{rom_name} for {device}"
        response = Telegraph(access_token=self.__TELEGRAPH_TOKEN).create_page(
            title=title,
            html_content=html_content,
            author_name=self.__AUTHOR_NAME)

        return f'https://telegra.ph/{response["path"]}'
示例#2
0
class TelegraphHelper:
    def __init__(self, author_name=None, author_url=None):
        self.telegraph = Telegraph()
        self.short_name = ''.join(random.SystemRandom().choices(
            string.ascii_letters, k=8))
        self.access_token = None
        self.author_name = author_name
        self.author_url = author_url
        self.create_account()

    def create_account(self):
        self.telegraph.create_account(short_name=self.short_name,
                                      author_name=self.author_name,
                                      author_url=self.author_url)
        self.access_token = self.telegraph.get_access_token()
        LOGGER.info(
            f"Creating TELEGRAPH Account using  '{self.short_name}' name")

    def create_page(self, title, content):
        try:
            return self.telegraph.create_page(title=title,
                                              author_name=self.author_name,
                                              author_url=self.author_url,
                                              html_content=content)
        except RetryAfterError as st:
            LOGGER.warning(
                f'Telegraph Flood control exceeded. I will sleep for {st.retry_after} seconds.'
            )
            sleep(st.retry_after)
            return self.create_page(title, content)

    def edit_page(self, path, title, content):
        try:
            return self.telegraph.edit_page(path=path,
                                            title=title,
                                            author_name=self.author_name,
                                            author_url=self.author_url,
                                            html_content=content)
        except RetryAfterError as st:
            LOGGER.warning(
                f'Telegraph Flood control exceeded. I will sleep for {st.retry_after} seconds.'
            )
            sleep(st.retry_after)
            return self.edit_page(path, title, content)
    LOGGER.error("One or more env variables missing! Exiting now")
    exit(1)

#Generate User String
LOGGER.info("Generating USER_SESSION_STRING")
app = Client(':memory:',
             api_id=int(TELEGRAM_API),
             api_hash=TELEGRAM_HASH,
             bot_token=BOT_TOKEN)

#Generate Telegraph Token
sname = ''.join(random.SystemRandom().choices(string.ascii_letters, k=8))
LOGGER.info("Generating Telegraph Token using '" + sname + "' name")
TELEGRAPH = Telegraph()
TELEGRAPH.create_account(short_name=sname)
TELEGRAPH_TOKEN = TELEGRAPH.get_access_token()
LOGGER.info("Telegraph Token Generated: '" + TELEGRAPH_TOKEN + "'")

try:
    HEROKU_API_KEY = getConfig('HEROKU_API_KEY')
except KeyError:
    logging.warning('HEROKU API KEY not provided!')
    HEROKU_API_KEY = None
try:
    HEROKU_APP_NAME = getConfig('HEROKU_APP_NAME')
except KeyError:
    logging.warning('HEROKU APP NAME not provided!')
    HEROKU_APP_NAME = None
try:
    MAX_TORRENT_SIZE = int(getConfig("MAX_TORRENT_SIZE"))
except KeyError:
示例#4
0
    finally:
        cur.close()
        conn.close()

LOGGER.info("Generating USER_SESSION_STRING")
app = Client(':memory:',
             api_id=int(TELEGRAM_API),
             api_hash=TELEGRAM_HASH,
             bot_token=BOT_TOKEN)

# Generate Telegraph Token
sname = ''.join(random.SystemRandom().choices(string.ascii_letters, k=8))
LOGGER.info("Generating TELEGRAPH_TOKEN using '" + sname + "' name")
telegraph = Telegraph()
telegraph.create_account(short_name=sname)
telegraph_token = telegraph.get_access_token()

try:
    STATUS_LIMIT = getConfig('STATUS_LIMIT')
    if len(STATUS_LIMIT) == 0:
        raise KeyError
    else:
        STATUS_LIMIT = int(getConfig('STATUS_LIMIT'))
except KeyError:
    STATUS_LIMIT = None
try:
    MEGA_API_KEY = getConfig('MEGA_API_KEY')
except KeyError:
    logging.warning('MEGA API KEY not provided!')
    MEGA_API_KEY = None
try:
示例#5
0
    LOGGER.info('Generating USER_SESSION_STRING...')
    with Client(':memory:',
                api_id=int(TELEGRAM_API),
                api_hash=TELEGRAM_HASH,
                bot_token=BOT_TOKEN) as app:
        USER_SESSION_STRING = app.export_session_string()
        update_dat('config.env', 'USER_SESSION_STRING', USER_SESSION_STRING)

# Generate TELEGRAPH_TOKEN
if USE_TELEGRAPH:
    sname = ''.join(random.SystemRandom().choices(string.ascii_letters, k=8))
    LOGGER.info("Using Telegra.ph...")
    LOGGER.info("Generating TELEGRAPH_TOKEN...")
    telegraph = Telegraph()
    telegraph.create_account(short_name=sname)
    TELEGRAPH_TOKEN = telegraph.get_access_token()
if not USE_TELEGRAPH:
    TELEGRAPH_TOKEN = None
    LOGGER.info("Not Using Telegra.ph...")
    pass

try:
    INDEX_URL = os.environ['INDEX_URL']
    if len(INDEX_URL) == 0:
        INDEX_URL = None
except KeyError:
    INDEX_URL = None
try:
    BUTTON_THREE_NAME = os.environ['BUTTON_THREE_NAME']
    BUTTON_THREE_URL = os.environ['BUTTON_THREE_URL']
    if len(BUTTON_THREE_NAME) == 0 or len(BUTTON_THREE_URL) == 0:
示例#6
0
         if arg == sys.argv[0]:
             continue
         p.apply_async(main_up, args=(arg, ))
     p.close()
     p.join()
     print("upload final")
     input("waiting for input")
 else:
     inp = input("输入info获取信息,输入list获取所有的文章列表")
     if inp == "info":
         print(
             telegraph.get_account_info([
                 'short_name', 'author_name', 'author_url', 'auth_url',
                 'page_count'
             ]))
         print(telegraph.get_access_token())
     if inp == "list":
         offset = 0
         while True:
             page_list = telegraph.get_page_list(offset, 10)
             print("共有{total}篇文章,目前显示的是{page_s}-{page_e}页".format(
                 total=page_list['total_count'],
                 page_s=offset + 1,
                 page_e=offset + 10))
             pages = page_list['pages']
             for args in pages:
                 for key, value in args.items():
                     print("{}:{}".format(key, value))
                 print("")
             flag = input("输入n下一页,输入b上一页,输入q退出")
             if flag == "q":
示例#7
0
class Data:

    TEST_PHOTO = "https://i.ibb.co/0Gv4JyW/photo-2021-04-16-12-48-15.jpg"

    JOB_FAIR_END_TIME = datetime(2021, 5, 20, 20, 0, 0)

    def __init__(self, conn_string: str, bot: TeleBot):
        self.bot = bot

        me.connect(host=conn_string)
        print("connection success ")

        # if there is no ejf table in DB - then create it
        if len(JobFair.objects) == 0:
            self.reinit_ejf_table()
            print("ejf and content tables have been initialized")
        # if there was table already
        else:
            self.update_ejf_table()

        # create telegraph account
        self._create_telegraph_account()

        self.ADMIN_PASSWORD = self.get_ejf().admin_password

        # remove later
        # if there is no quiz table in DB - then create it
        self.add_quizes()

        # for user in User.objects:
        #    user.additional_info = None
        #    user.save()

    def add_test_company_with_vacancies(self,
                                        user,
                                        vacancies_number=2,
                                        photo=None,
                                        company_name=None):

        # company
        name = self._generate_string(
        ) if company_name is None else company_name
        photo_id = self.TEST_PHOTO if photo is None else photo
        description = self._generate_string(long=True)
        vacancy_counter = 20  # ?
        HR = user
        token = self._generate_string()
        registration_date = datetime.now(tz=timezone.utc)

        test_company = Company(
            name=name,
            photo_id=photo_id,
            description=description,
            vacancy_counter=vacancy_counter,
            HR=HR,
            token=token,
            registration_date=registration_date,
        )
        test_company.save()

        # vacancies
        for i in range(vacancies_number):
            company = test_company
            name = self._generate_string()
            tag = self.get_ejf().filters_interest[random.randint(
                0,
                len(self.get_ejf().filters_interest) - 1)]
            salary = f"{random.randint(1000, 5000)}$"
            experience = self.get_ejf().filters_experience[random.randint(
                0,
                len(self.get_ejf().filters_experience) - 1)]
            employment_type = self.get_ejf().filters_employment[random.randint(
                0,
                len(self.get_ejf().filters_employment) - 1)]
            description = self._generate_string(long=True)
            add_date = datetime.now(tz=timezone.utc)
            last_update_date = datetime.now(tz=timezone.utc)
            active_days_left = 14
            is_active = True

            vacancy = Vacancy(
                company=company,
                name=name,
                tag=tag,
                salary=salary,
                experience=experience,
                employment_type=employment_type,
                description=description,
                add_date=add_date,
                last_update_date=last_update_date,
                active_days_left=active_days_left,
                is_active=is_active,
            )

            from .objects import vacancy as vacancy_module

            vacancy_module.create_vacancy_telegraph_page(
                vacancy, self.telegraph)

            vacancy.save()

    def add_quizes(self):
        if len(Quiz.objects) == 0:
            self._add_start_quiz()
        # otherwise update it
        else:
            self.update_quiz_table()

        # add vacancy quiz
        if Quiz.objects.filter(name="VacancyQuiz").count() == 0:
            self._add_vacancy_quiz()
            print("Vacancy quiz has been added")

        # add vacancy quiz
        if Quiz.objects.filter(name="VacancyEditQuiz").count() == 0:
            self._add_vacancy_edit_quiz()
            print("Vacancy edit quiz has been added")

        # add company quiz
        if Quiz.objects.filter(name="CompanyQuiz").count() == 0:
            self._add_company_quiz()
            print("Company quiz has been added")

    def _add_start_quiz(self):

        quiz = Quiz(name="StartQuiz", is_required=True)

        q_name_surname = Question(
            name="name_surname",
            message="Як мені до тебе звертатися?",
            correct_answer_message="Гарно звучить 🥰",
            wrong_answer_message="Введи ім’я текстом 🤡",
        )

        q_age = Question(
            name="age",
            message="Скільки тобі років?",
            regex="[1-9][0-9]",
            correct_answer_message="Ого, ми однолітки 🥰",
            wrong_answer_message="Вкажи свій справжній вік 🤡",
        )

        q_school = Question(
            name="school",
            message="Де вчишся? Вибери або введи.",
            buttons=[
                "НУЛП",
                "ЛНУ",
                "УКУ",
                "КПІ",
                "КНУ",
                "Ще в школі",
                "Вже закінчив(-ла)",
            ],
            correct_answer_message="Клас 🥰",
            wrong_answer_message="Введи назву текстом 🤡",
        )

        q_study_term = Question(
            name="study_term",
            message="Який ти курс?",
            buttons=[
                "Перший",
                "Другий",
                "Третій",
                "Четвертий",
                "На магістартурі",
                "Нічого з переліченого",
            ],
            allow_user_input=False,
            correct_answer_message="Ідеальний час, щоб будувати кар'єру 🥰",
            wrong_answer_message="Вибери, будь ласка, один з варіантів 🤡",
        )

        ##############
        q_city = Question(
            name="city",
            message="Звідки ти? Вибери зі списку або введи назву.",
            buttons=["Львів", "Київ", "Новояворівськ", "Донецьк", "Стамбул"],
            correct_answer_message="Був-був там!",
            wrong_answer_message="Введи назву текстом :)",
        )

        q_contact = Question(
            name="contact",
            message="Обміняємося контактами?",
            buttons=["Тримай!"],
            input_type="contact",
            correct_answer_message=
            "Дякую. А я залишаю тобі контакт головного організатора: @Slavkoooo 🥰",
            wrong_answer_message="Надішли, будь ласка, свій контакт 🤡",
        )

        q_email = Question(
            name="email",
            message="Наостанок, вкажи адресу своєї поштової скриньки.",
            regex="^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$",
            correct_answer_message="Дякую 🥰",
            wrong_answer_message="Введи, будь ласка, електронну адресу 🤡",
        )

        q_agree = Question(
            name="user_agreements",
            message="Залишилося тільки дати згоду на обробку даних.",
            buttons=["Я погоджуюсь."],
            allow_user_input=False,
        )

        q_register_end = Question(
            name="end_register",
            message=
            "Хух, усі формальності позаду!\n\nЯ зареєстрував тебе на ІЯК. Далі нас очікують два дні пригод.\n\n<b>Поонлайнимо?</b> 🤓",
            buttons=[
                "Прийду подивитися 👀",
                "Прийду шукати роботу 🤑",
                "Прийду дізнатися щось нове 🧐",
                "Візьму участь у воркшопах✍️",
                "Все разом 🤹",
            ],
            allow_user_input=False,
        )

        quiz.questions = [
            q_name_surname,
            q_age,
            q_school,
            q_study_term,
            # q_city,
            q_contact,
            q_email,
            q_agree,
            q_register_end,
        ]

        quiz.save()

    def _add_vacancy_quiz(self):
        quiz = Quiz(name="VacancyQuiz", is_required=False)

        ejf = self.get_ejf()

        q_name = Question(
            name="name",
            message="Спочатку введи назву вакансії",
            max_text_size=100,
            correct_answer_message="Гарно звучить 🥰",
            wrong_answer_message="Введи назву текстом 🤡",
        )

        q_tag = Question(
            name="tag",
            message="Вибери категорію до якої відноситься вакансія",
            buttons=list(ejf.filters_interest),
            correct_answer_message="Ого, круто 🥰",
            wrong_answer_message="Не треба так робити",
            allow_user_input=False,
        )

        q_experience = Question(
            name="experience",
            message=
            "Вибери наскільки досвідченим має бути твій новий працівник!",
            buttons=list(ejf.filters_experience),
            correct_answer_message="Ого, круто 🥰",
            wrong_answer_message="Не треба так робити",
            allow_user_input=False,
        )

        q_employment = Question(
            name="employment_type",
            message="Вибери тип зайнятості",
            buttons=list(ejf.filters_employment),
            correct_answer_message="Ого, круто 🥰",
            wrong_answer_message="Не треба так робити",
            allow_user_input=False,
        )

        q_salary = Question(
            name="salary",
            message="Введи скільки зароблятиме твій працівник",
            max_text_size=30,
            buttons=["Договірно"],
            correct_answer_message="Ого, круто 🥰",
            wrong_answer_message="Не треба так робити",
        )

        q_description = Question(
            name="description",
            message=
            "Лишився останній штрих!\nНадішли мені стислий опис своєї вакансії, щоб кандидат міг зрозуміти, чим він буде займатись.\n\n<b>Максимум 2000 символів</b>",
            max_text_size=2000,
            correct_answer_message="Клас 🥰",
            wrong_answer_message=
            "Введи опис текстом і не більше 2000 символів 🤡",
        )

        quiz.questions = [
            q_name,
            q_tag,
            q_experience,
            q_employment,
            q_salary,
            q_description,
        ]

        quiz.save()

    def _add_vacancy_edit_quiz(self):
        quiz = Quiz(name="VacancyEditQuiz", is_required=False)

        ejf = self.get_ejf()

        q_tag = Question(
            name="tag",
            message="Вибери категорію до якої відноситься вакансія",
            buttons=list(ejf.filters_interest),
            correct_answer_message="Ого, круто 🥰",
            wrong_answer_message="Не треба так робити",
            allow_user_input=False,
        )

        q_experience = Question(
            name="experience",
            message=
            "Вибери наскільки досвідченим має бути твій новий працівник!",
            buttons=list(ejf.filters_experience),
            correct_answer_message="Ого, круто 🥰",
            wrong_answer_message="Не треба так робити",
            allow_user_input=False,
        )

        q_employment = Question(
            name="employment_type",
            message="Вибери тип зайнятості",
            buttons=list(ejf.filters_employment),
            correct_answer_message="Ого, круто 🥰",
            wrong_answer_message="Не треба так робити",
            allow_user_input=False,
        )

        q_salary = Question(
            name="salary",
            message="Введи скільки зароблятиме твій працівник",
            max_text_size=30,
            buttons=["Договірно"],
            correct_answer_message="Ого, круто 🥰",
            wrong_answer_message="Не треба так робити",
        )

        q_description = Question(
            name="description",
            message=
            "Лишився останній штрих!\nНадішли мені стислий опис своєї вакансії, щоб кандидат міг зрозуміти, чим він буде займатись.\n\n<b>Максимум 2000 символів</b>",
            max_text_size=2000,
            correct_answer_message="Клас 🥰",
            wrong_answer_message=
            "Введи опис текстом і не більше 2000 символів 🤡",
        )

        quiz.questions = [
            q_tag,
            q_experience,
            q_employment,
            q_salary,
            q_description,
        ]

        quiz.save()

    def _add_company_quiz(self):
        quiz = Quiz(name="CompanyQuiz", is_required=False)

        q_name = Question(
            name="name",
            message="Спочатку введи назву компанії",
            max_text_size=30,
            correct_answer_message="Гарно звучить 🥰",
            wrong_answer_message="Введи назву текстом 🤡",
        )

        q_photo_id = Question(
            name="photo_id",
            message="Скинь фотку компанії",
            input_type="photo",
            correct_answer_message="Ого, круто 🥰",
            wrong_answer_message="Не треба так робити",
        )

        q_description = Question(
            name="description",
            message="Надішли опис компанії",
            max_text_size=2000,
            correct_answer_message="Клас 🥰",
            wrong_answer_message=
            "Введи опис текстом і не більше 2000 символів 🤡",
        )

        q_company_url = Question(
            name="company_url",
            message="Надішли посилання на сайт компанії",
            regex="^https:\/\/.*",
            correct_answer_message="Клас 🥰",
            wrong_answer_message=
            "Введи посилання яке починається на <b>https://</b>",
        )

        quiz.questions = [q_name, q_photo_id, q_description, q_company_url]

        quiz.save()

    def reinit_ejf_table(self):
        # delete collections
        JobFair.objects.delete()
        Content.objects.delete()

        # create content table
        content = Content()
        content.start_text = (
            "Йоу, друзі! Теж помітили, що останнім часом зникли запахи і їжа якось не так смакує? 😔 Усе ясно: життя без ІЯКу втратило смак.\n\n"
            "🌤 Нам пощастило, що до 19 травня залишилося зовсім трохи. А що там 19 травня? А там <b>повернення легендарного Інженерного ярмарку кар’єри — ІЯКу від BEST Lviv!</b>"
            "Але мусимо зробити камінг-аут: цього року <b>ІЯК став віртуалом.</b> 😳 Немає часу пояснювати. Ти, головне, реєструйся. Далі — більше"
        )

        content.user_start_text = "Прив"
        content.user_start_photo = self.TEST_PHOTO
        content.ejf_start_text = (
            "Я знаю, друже, що до 19 травня ще є трохи часу, тому приготував для тебе кілька корисних штук. Заходь у <b>меню</b>, читай, слідкуй за оновленнями 🧐\n\n"
            "Почувай себе, як вдома ☺️")
        content.ejf_start_photo = self.TEST_PHOTO
        content.save()

        # create ejf table
        ejf = JobFair()
        ejf.filters_interest = ["Full Stack", "Front End", "Data Science"]
        ejf.filters_experience = ["1 рік", "3+ років"]
        ejf.filters_employment = ["Full time", "Part time"]
        ejf.admin_password = "******"
        ejf.cv_archive_file_id_list = []
        ejf.cv_archive_last_update = None
        ejf.cv_archive_size = 0
        ejf.start_menu = [
            SimpleButton(
                name="Що? 🤨",
                text=
                ("<b>Інженерний ярмарок кар’єри — коротко ІЯК — це must-visit подія для кожного студента.</b> Не лякайся слова “інженерний”, бо наш Ярмарок уже давно вийшов за будь-які рамки і навіть претендує називатися наймасштабнішим у Львові.\n\n"
                 "У нас для цього є все:\n\n"
                 "✅ <b>Топ-компанії</b>, які зацікавлені в студентах. Чекни розділ 'Компанії'.\n\n"
                 "✅ Класний <b>контент</b>, який за два дні допоможе тобі нарешті відповісти на питання, ким ти хочеш стати. Ознайомся з розділом 'Розклад'.\n\n"
                 "✅ Можливість знайти <b>роботу</b> прямо через бота, тобто через мене! Після 20 травня я оновлю меню і ти все зрозумієш.\n\n"
                 "✅ Найкращі <b>учасники</b>. Угу, такі як ти!😌\n\n"
                 "Останні штрихи й ІЯК 2021 стане реальністю. Ще й не простою, а віртуальною. <b>Зустрінемося на Hopin!</b>\n\n"
                 "Па!"),
                photo=self.TEST_PHOTO,
            ),
            SimpleButton(
                name="Де і як? 🦦",
                text=
                ("Пам’ятаєш, ще на початку я казав, що ІЯК став віртуалом? Так-от, я мав на увазі, що цього року у Львівській політехніці звичного Ярмарку не буде. Не буде довгих черг, великих скупчень і хаосу. <b>Ми переїжджаємо в кращі санітарні умови... В онлайн простір!</b>✌️👩‍💻\n\n"
                 "ІЯК відбудеться на платформі <b>Hopin</b>. Ти майже не відчуєш різниці між спілкуванням наживо і онлайн. На Hopin усе організовано так, як ми звикли: віртуальні стенди з компаніями, окрема кімната для презентацій та воркшопів. Є навіть сцена!\n\n"
                 "<b>Переходь за посиланням у запрошенні і побач усе на власні очі.</b>"
                 ),
                photo=self.TEST_PHOTO,
            ),
            SimpleButton(
                name="Компанії 📈",
                text="КомпаніїКомпаніїКомпанії",
                photo=self.TEST_PHOTO,
                url_link="https://ejf.best-lviv.org.ua/partners/ejfwp/",
                url_text="Детально про компанії",
            ),
            SimpleButton(
                name="Розклад 📌",
                text="РозкладРозкладРозклад",
                photo=self.TEST_PHOTO,
            ),
            SimpleButton(
                name="Зв'язок з нами ✍️",
                text=
                ("🙂Залишилися питання? Може, маєш важливий фідбек на цьому етапі? У такому разі напиши комусь з нас🙃\n\n"
                 "<b>Вибирай:</b>\n\n"
                 "<a href='https://t.me/Slavkoooo'>головний організатор Ярік</a>\n\n"
                 "<a href='https://t.me/PogibaAnn'>відповідальна за компанії Аня</a>\n\n"
                 "<a href='https://t.me/OnAzart'>відповідальний за компанії Назар</a>\n\n"
                 "<a href='https://t.me/Yaroslav_Horodyskyi'>відповідальний за технічну частину Ярік</a>\n\n"
                 "<a href='https://t.me/demberetska'>відповідальна за контент Соля</a>\n\n"
                 "<a href='https://t.me/foxiero'>відповідальна за дизайн Софа</a>\n\n"
                 "<a href='https://t.me/vikahbhk'>відповідальна за піар Віка</a>\n\n"
                 "<a href='https://t.me/yarchik_5'>відповідальна за людські ресурси Ярина</a>\n\n"
                 ),
                photo=self.TEST_PHOTO,
            ),
        ]
        ejf.content = content
        ejf.start_datetime = datetime(2021, 5, 19, 10, 0, 0)
        ejf.end_datetime = self.JOB_FAIR_END_TIME
        ejf.save()

    def update_ejf_table(self):
        ejf = self.get_ejf()

        # form paragraphs in ejf menu
        for btn in ejf.start_menu:
            btn.name = btn.name.replace("\\n", "\n")
            btn.text = btn.text.replace("\\n", "\n")

        # form paragraphs in content
        content = ejf.content
        ejf.content.start_text = content.start_text.replace("\\n", "\n")
        ejf.content.user_start_text = content.user_start_text.replace(
            "\\n", "\n")
        ejf.content.ejf_start_text = content.ejf_start_text.replace(
            "\\n", "\n")

        ejf.content.save()
        ejf.save()

    def update_quiz_table(self):
        quizes = Quiz.objects

        # form paragraphs in questions
        for quiz in quizes:
            for question in quiz.questions:
                question.message = question.message.replace("\\n", "\n")

            quiz.save()

    def get_ejf(self):
        return JobFair.objects.first()

    def get_cv_count(self) -> int:
        return User.objects.filter(cv_file_id__ne=None).count()

    def update_deleted_users(self):
        pass

    # HZ CHI TREBA
    def _add_test_user(
        self,
        chat_id,
        name,
        surname,
        username,
        interests=[],
        experience="",
        employment="",
        apply_counter=0,
        registration_date=None,
        last_update_date=None,
        last_interaction_date=None,
        hr_status=False,
    ):

        registration_date = datetime.now(tz=timezone.utc)
        last_interaction_date = registration_date
        last_update_date = registration_date

        User(
            chat_id=chat_id,
            name=name,
            surname=surname,
            username=username,
            interests=interests,
            experience=experience,
            employment=employment,
            apply_counter=apply_counter,
            registration_date=registration_date,
            last_update_date=last_update_date,
            last_interaction_date=last_interaction_date,
            hr_status=hr_status,
        ).save()

    def _generate_string(self, long=False):
        letters = string.ascii_letters
        if long is False:
            length = random.randint(10, 30)
        else:
            length = random.randint(300, 500)

        return "".join(random.choice(letters) for i in range(length))

    def _create_telegraph_account(self):
        SHORT_NAME = "BEST Job Fest"
        AUTHOR_NAME = "BEST Lviv"
        AUTHOR_URL = "https://t.me/bestlviv"

        ejf = self.get_ejf()

        if ejf.telegraph_token is None:
            self.telegraph = Telegraph()
            self.telegraph.create_account(SHORT_NAME, AUTHOR_NAME, AUTHOR_URL)

            # save new token
            ejf.update(set__telegraph_token=self.telegraph.get_access_token())
            ejf.save()

            print("New Telegraph account has been initialized")

        else:
            self.telegraph = Telegraph(ejf.telegraph_token)

            print("Telegraph account has been initialized")