def update_category_list(self): self.notify_admin('Sending category list...') # generate category links to previous messages all_categories = '\n'.join([ "[{}](https://t.me/{}/{})".format(str(c), self.channel.username, c.current_message_id) for c in Category.select_all() ]) url_stub = 'https://t.me/{}/'.format(self.channel.username) category_list = self._read_file(self.CATEGORY_LIST_FILE) # Insert placeholders text = category_list.format(url_stub + str(self.channel.intro_en_mid), url_stub + str(self.channel.intro_es_mid), all_categories, url_stub + str(self.channel.new_bots_mid)) msg = self.send_or_edit(text, self.channel.category_list_mid) if msg: self.channel.category_list_mid = msg.message_id self.sent['category_list'] = "Category Links sent" self._save_channel()
def delete_full_botlist(self): all_cats = Category.select_all() start = all_cats[0].current_message_id - 3 # Some wiggle room and GIF end = all_cats[-1].current_message_id + 4 # Some wiggle room self.notify_admin("Deleting all messages...") for m in range(start, end): try: self.bot.delete_message(self.channel.chat_id, m) except BadRequest as e: pass
def categories_endpoint(): """ Returns all categories of the BotList. """ if request.method == 'GET': query = Category.select_all() data = [i.serialize for i in query] if data: res = jsonify({'categories': data, 'meta': {'url': request.url}}) res.status_code = 200 else: res = _error('No categories found.') res.status_code = 500 return res
def send_botlist(bot, update, resend=False, silent=False): log.info("Re-sending BotList..." if resend else "Updating BotList...") channel = helpers.get_channel() revision = Revision.get_instance() revision.nr += 1 revision.save() all_categories = Category.select_all() botlist = BotList(bot, update, channel, resend, silent) if resend: botlist.delete_full_botlist() botlist.update_intro() botlist.update_categories(all_categories) botlist.update_new_bots_list() botlist.update_category_list() botlist.send_footer() botlist.finish() channel.save() Statistic.of(update, 'send', 'botlist (resend: {})'.format(str(resend)), Statistic.IMPORTANT)
def inlinequery_handler(bot, update, chat_data): query = update.inline_query.query.lower() # TODO: remove or enhance eventually, this is potentially very spammy # Statistic.of(update, 'inlinequery', '"{}"'.format(query), Statistic.DETAILED) user = User.from_update(update) results_list = list() input_given = len(query.strip()) > 0 query_too_short = 0 < len(query.strip()) < SEARCH_QUERY_MIN_LENGTH too_many_results = False cat_results = [] bot_results = [] if input_given: # query category results cat_results = search.search_categories(query) if not query_too_short: # query bot results bot_results = list(search.search_bots(query)) if len(bot_results) > MAX_BOTS: bot_results = bot_results[:MAX_BOTS] too_many_results = True # query for new bots if query == messages.NEW_BOTS_INLINEQUERY.lower() or query == 'new': results_list.append(new_bots_article()) bot.answerInlineQuery(update.inline_query.id, results=results_list) return if query in CONTRIBUTING_QUERIES: results_list.append( InlineQueryResultArticle( id=uuid4(), title='Contributing', input_message_content=InputTextMessageContent( message_text=messages.CONTRIBUTING, parse_mode="Markdown"), )) bot.answerInlineQuery(update.inline_query.id, results=results_list, cache_time=600) return if query in EXAMPLES_QUERIES: results_list.append( InlineQueryResultArticle( id=uuid4(), title='Examples', input_message_content=InputTextMessageContent( message_text=messages.EXAMPLES, parse_mode="Markdown"), )) bot.answerInlineQuery(update.inline_query.id, results=results_list, cache_time=600) return if query in (const.DeepLinkingActions.RULES, '#rules'): results_list.append( InlineQueryResultArticle( id=uuid4(), title='@BotListChat Rules', input_message_content=InputTextMessageContent( message_text=messages.BOTLISTCHAT_RULES, parse_mode="Markdown", disable_web_page_preview=True), )) bot.answerInlineQuery(update.inline_query.id, results=results_list, cache_time=600) return if query == const.DeepLinkingActions.FAVORITES and user.has_favorites: results_list.append(favorites_article(user)) bot.answerInlineQuery(update.inline_query.id, results=results_list, cache_time=0, is_personal=True) return msg, reply_markup, key = botlistchat.get_hint_message_and_markup(query) if msg is not None: results_list.append(hint_article(msg, reply_markup, key)) bot.answerInlineQuery(update.inline_query.id, results=results_list, cache_time=600) return invalid_search_term = query_too_short and not cat_results if invalid_search_term: results_list.append(query_too_short_article()) results_available = cat_results or bot_results if results_available: if len(bot_results) > 1: results_list.append( all_bot_results_article(bot_results, too_many_results)) for c in cat_results: results_list.append(category_article(c)) for b in bot_results: results_list.append(bot_article(b)) if len(bot_results) > 0: bot.answerInlineQuery( update.inline_query.id, results=results_list, switch_pm_text="See all results" if too_many_results else "Search in private chat", switch_pm_parameter=util.encode_base64(query), cache_time=0, is_personal=True) else: bot.answerInlineQuery(update.inline_query.id, results=results_list, cache_time=0, is_personal=True) else: if user.has_favorites: results_list.append(favorites_article(user)) results_list.append(new_bots_article()) categories = Category.select_all() for c in categories: results_list.append(category_article(c)) if invalid_search_term or not input_given: bot.answerInlineQuery(update.inline_query.id, results=results_list, cache_time=0, is_personal=True) else: bot.answerInlineQuery( update.inline_query.id, results=results_list, switch_pm_text="No results. Contribute a bot?", switch_pm_parameter='contributing', cache_time=0, is_personal=True)