Ejemplo n.º 1
0
def send_message_to_user(client: DiscourseClient,
                         voucher: VoucherConfigElement, message: str) -> None:
    username = get_username(voucher)
    message_id = voucher.get('message_id')
    if not message_id:
        return
    logging.info(f'Sending message to {username} (Thread {message_id})')
    client.create_post(message, topic_id=message_id)
Ejemplo n.º 2
0
def create_post(user, post_details, category_id=None, topic_id=None):
    """Call discourse API posts.json to create a new Topic or Post within a topic
    """

    logger.info('+ discourse.create_post')
    if not user.is_authenticated:
        return True, 'Please logon to Post to Discourse', 0, ''

    # Create Discourse client for user
    client = DiscourseClient(
        settings.DISCOURSE_HOST,
        api_username=user.username,
        api_key=settings.DISCOURSE_API_KEY)

    # Check user is present in Discourse
    error, error_message, user_id = get_user(client, user.username)
    if user_id == 0:
        return error, error_message, 0, ''

    title = post_details['title']
    content = post_details['content']
    tags = post_details['tags']

    if tags is None:
        tags = []

    if len(content) < 20:
        return True, 'Content must be more than 20 characters long in Discourse', 0, ''

    post = client.create_post(content, category_id, topic_id, title, tags)
    # posts url = / t / {topic_id} / {post_number}
    post_url = os.path.join(settings.DISCOURSE_HOST, 't',  str(post['topic_id']),  str(post['post_number']))
    logger.info('- discourse.create_post')

    return error, error_message, post['topic_id'], post_url
Ejemplo n.º 3
0
def send_voucher_to_user(client: DiscourseClient,
                         voucher: VoucherConfigElement):
    username = get_username(voucher)
    message_content = render('voucher_message.md', voucher=voucher)
    logging.info(f'Sending voucher to {username}')
    res = client.create_post(message_content,
                             title='Dein 36C3 Voucher',
                             archetype='private_message',
                             target_usernames=username)
    message_id = res.get('topic_id')
    logging.info(f'Sent, message_id is {message_id}')
    voucher['message_id'] = message_id
Ejemplo n.º 4
0
    def createEvent(self, event):
        logging.debug('Discourse')

        dateTimeFormat = '%Y %b %d - %I:%M %p'

        description = event.htmlSummary()

        logging.debug('Connecting to API')

        discourse_api = DiscourseClient(
            self.getSetting('Website'),
            api_username=self.getSetting('Username'),
            api_key=self.getSetting('API Key'))

        logging.debug('Creating post')
        title = 'Event notice: ' + event.title + ' (' \
            + event.start_date.strftime(dateTimeFormat) + ')'
        post = discourse_api.create_post(content=description,
                                         category_id=int(self.getSetting('Category ID')),
                                         topic_id=None, title=title)

        post_url = f"https://talk.makeict.org/t/{post['id']}"

        return (post['id'], post_url)
            vars_match_user = comment['created_by_id']
            cursor_match_user.execute(query_match_user, (vars_match_user, ))
            user = cursor_match_user.fetchone()

            if user != None:
                user_id = user['discourse_id']
            else:
                logger.error('User ID=%s not found! Comment created by BOT!')
                user_id = -2

            try:
                logger.info('Migrating comment...')

                startTs = time.time()
                discourse_post = discourse.create_post(
                    content=content_bbcode,
                    topic_id=discourse_id,
                    created_at=comment['created_at'])

                query_user_actions = """
                update user_actions
                set user_id=%s,
                    acting_user_id=%s,
                    created_at=%s,
                    updated_at=%s
                where target_post_id=%s
                """
                vars_user_actions = (user_id, user_id, comment['created_at'],
                                     comment['created_at'],
                                     discourse_post['id'])

                cursor_pgsql.execute(query_user_actions, vars_user_actions)
        user = cursor_match_user.fetchone()
        if user != None:
            user_id = user['discourse_id']
        else:
            logger.warning('User ID=%s not found! Topic created by BOT!' %
                           topic['created_by_id'])
            user_id = -2

        try:
            logger.info('Call discourse')

            startTs = time.time()
            try:
                discourse_topic = discourse.create_post(
                    content_bbcode,
                    title=topic_title,
                    category=category,
                    created_at=topic['created_at'])

                topic_id = discourse_topic['topic_id']
                slug_new = discourse_topic['topic_slug']
                slug_old = topic['slug']
                match_slug = 1

                if slug_new != slug_old:
                    match_slug = 0
                    logger.warning('Slugs are different! %s vs %s' %
                                   (slug_new, slug_old))

            except Exception, e:
                if 'Title has already been used' in e.message: