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)
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
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
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: