def query_empty(inline_query): LOG.debug(inline_query) r = [] recently_used_sounds = tools.get_latest_used_sounds_from_user( inline_query.from_user.id) for sound in recently_used_sounds: r.append( types.InlineQueryResultVoice(sound["id"], BUCKET + sound["filename"], '🕚 ' + sound["text"], caption=sound["text"])) for sound in sounds: if sound in recently_used_sounds: continue r.append( types.InlineQueryResultVoice(sound["id"], BUCKET + sound["filename"], sound["text"], caption=sound["text"])) if len( r ) > TELEGRAM_INLINE_MAX_RESULTS: # https://core.telegram.org/bots/api#answerinlinequery break bot.answer_inline_query(inline_query.id, r, is_personal=True, cache_time=5) on_query(inline_query)
def create_inline_results_tts_audio( q: types.InlineQuery, queries: OrderedDict, db_conn: Database) -> List[types.InlineQueryResultVoice]: inline_results = [] cont = 1 markup = types.InlineKeyboardMarkup() q.query = Utils.replace_url_problematic_chars(q.query) markup.add( types.InlineKeyboardButton("Text", callback_data=Utils.store_tts_query( q.query, queries))) normalized_text = normalize_uri(q.query) if Utils.is_arabic( q.query) else q.query.replace(' ', '+') magic = Constants.TTS_STR.format(query=normalized_text) iterable_lan = list(Constants.SORTED_LANGUAGES.items()) sql_read = Constants.DBStatements.DB_LAN_READ % str(q.from_user.id) result = db_conn.read_one(sql_read) if result is not None: user_sorted_lang = sorted( [(iterable_lan[i][0], iterable_lan[i][1], result[i]) for i in range(len(Constants.SORTED_LANGUAGES))], key=itemgetter(2), reverse=True) if not Utils.is_arabic(q.query): for i in range(len(user_sorted_lang)): inline_results.append( types.InlineQueryResultVoice(str(cont), magic + user_sorted_lang[i][1], user_sorted_lang[i][0], reply_markup=markup)) cont += 1 else: language_id = 0 for i in range(len(user_sorted_lang)): if 'Ar' in user_sorted_lang[i][1]: language_id = i inline_results.append( types.InlineQueryResultVoice( str(language_id + 1), magic + user_sorted_lang[language_id][1], user_sorted_lang[language_id][0], reply_markup=markup)) else: if not Utils.is_arabic(q.query): for key, val in Constants.SORTED_LANGUAGES.items(): inline_results.append( types.InlineQueryResultVoice(str(cont), magic + val, key, reply_markup=markup)) cont += 1 else: inline_results.append( types.InlineQueryResultVoice(str(cont), magic + iterable_lan[0][1], iterable_lan[0][0], reply_markup=markup)) return inline_results
def handle_inline(query): try: if len(query.query) > 0: result = process.extract(query.query, texts) result = list(filter(lambda x: x[1] > 60, result)) result_voices = [] for r in result: for v in voices: if v[2] == r[0]: result_voices.append(v) response = [] i = 1 for v in result_voices: voice_url = config.get('baseurl') + v[1] r = types.InlineQueryResultVoice(i, voice_url, v[2]) response.append(r) i += 1 else: response = default_voices bot.answer_inline_query(query.id, response) except Exception as e: print(e)
def query_text(inline_query): try: text = inline_query.query.translate(remove).lower() r = [] for i, sound in enumerate(sounds): if text in sound[2]: r.append( types.InlineQueryResultVoice(str(i), sound[0], sound[1])) bot.answer_inline_query(inline_query.id, r) except Exception as e: print(e)
def form_response(accent, word): response = [] for i, j in enumerate(search(word), 1): url = get_audio(j, accent) if url: inline_response = types.InlineQueryResultVoice( voice_url=url['audio'], title=j, id=i, reply_markup=get_keyboard(url), caption=pattern.format(accents[accent]['name'], j)) response.append(inline_response) return response
def query_text(query): try: query.query = query.query.replace("\n", " ") audiotext = query.query tts = gTTS(audiotext, lang="ru") tts.save(path) filelink = client.upload(filepath=path) print(filelink.url) ans = types.InlineQueryResultVoice(id=str(random.randint(1, 64 * 8)), voice_url=filelink.url, title="nothing") bot.answer_inline_query(query.id, [ans], cache_time=5) except Exception as e: print(e)
def query_text(inline_query): LOG.debug(inline_query) try: text = unidecode.unidecode(inline_query.query.translate(REMOVE_CHARS).lower()) LOG.debug("Querying: " + text) r = [] for sound in sounds: if text in sound["tags"]: # FIXME: Improve search r.append(types.InlineQueryResultVoice( sound["id"], BUCKET + sound["filename"], sound["text"], caption=sound["text"])) if len(r) > TELEGRAM_INLINE_MAX_RESULTS: break bot.answer_inline_query(inline_query.id, r, cache_time=5) on_query(inline_query) except Exception as e: LOG.error("Query aborted" + str(e), e)
def query_handler(q): global QUERIES # Saving useful data record_uid(q.from_user) record_log_queries(q) if isArabic(q.query): text = normalize_uri(q.query) else: text = q.query.replace(' ', '+') # Query for callback code_id = store_query(q) # bot.send_message(6216877, 'query id: ' + code_id) # Inline button b1 = types.InlineKeyboardButton("Text", callback_data=code_id) markup = types.InlineKeyboardMarkup() markup.add(b1) inline_results = [] # Predifined audio menu if "" == q.query: for txt,url in AUDIO_URL.items(): audio_id = AUDIO_ID[txt] b1 = types.InlineKeyboardButton("Text", callback_data=CALLBACK_DATA_PREFIX_FOR_PREDEFINED_AUDIOS + str(audio_id)) markup = types.InlineKeyboardMarkup() markup.add(b1) inline_results.append(types.InlineQueryResultVoice(str(audio_id), url, txt.capitalize(), reply_markup=markup)) # Predifined audio selection elif q.query in AUDIO_URL: inline_results.append(types.InlineQueryResultVoice(str(AUDIO_ID[q.query]), AUDIO_URL[q.query], q.query.capitalize(), reply_markup=markup)) # Regular audio else: magic = TTS.format(query=text) cont = 1 sql_read = "SELECT `Ar`,`De-de`,`En-uk`,`En-us`,`Es-es`,`Es-mx`,`Fr-fr`,`It-it`,`Pt-pt`,`El-gr`," + \ "`Ru-ru`,`Tr-tr`,`Zh-cn`,`Ja` FROM chosen_results WHERE id = '%s'" % (q.from_user.id) result = read_db(sql_read) if result is not None: # array of (language_name, language_id, language_count) sorted_languages = sorted([(LAN.items()[i][0], LAN.items()[i][1], result[0][i]) for i in range(len(LAN))], key=itemgetter(2), reverse=True) if not isArabic(q.query): for i in range(len(sorted_languages)): inline_results.append(types.InlineQueryResultVoice(str(cont), magic + sorted_languages[i][1], sorted_languages[i][0], reply_markup=markup)) cont += 1 else: language_id = 0 for i in range(len(sorted_languages)): if 'Ar' in sorted_languages[i][1]: language_id = i inline_results.append(types.InlineQueryResultVoice(str(language_id+1), magic + sorted_languages[language_id][1], sorted_languages[language_id][0], reply_markup=markup)) else: if not isArabic(q.query): for key, val in LAN.items(): inline_results.append(types.InlineQueryResultVoice(str(cont), magic + val, key, reply_markup=markup)) cont += 1 else: inline_results.append(types.InlineQueryResultVoice(str(cont), magic + LAN.items()[0][1], LAN.items()[0][0], reply_markup=markup)) bot.answer_inline_query(q.id, inline_results, cache_time=1)
def query_empty(inline_query): r = [] for i, sound in enumerate(sounds): r.append(types.InlineQueryResultVoice(str(i), sound[0], sound[1])) bot.answer_inline_query(inline_query.id, r)
def query_handler(q): global QUERIES inline_results = [] # Saving useful data record_uid(q.from_user) record_log_queries(q) # Personal audio if "" == q.query: sql_read = "SELECT `file_id`, `description`, `user_audio_id` FROM Own_Audios WHERE id='%s'" % ( str(q.from_user.id)) result = read_db(sql_read) if result is not None: for audio in result: markup = types.InlineKeyboardMarkup() markup.add( types.InlineKeyboardButton("Description", callback_data=audio[0])) inline_results.append( types.InlineQueryResultCachedVoice(str(audio[2]), audio[0], audio[1], reply_markup=markup)) # TTS audio else: # text = urllib2.quote(text.encode('UTF-8')) # bot.send_message(6216877, text) # text = text.replace('%2B', '+') # bot.send_message(6216877, text) # normalize query q.query = q.query.replace("\n", " ") text = normalize_uri(q.query) if isArabic( q.query) else q.query.replace(' ', '+') # Inline button code_id = store_query(q) markup = types.InlineKeyboardMarkup() markup.add(types.InlineKeyboardButton("Text", callback_data=code_id)) magic = TTS.format(query=text) cont = 1 sql_read = "SELECT `Ar`,`De-de`,`En-uk`,`En-us`,`Es-es`,`Es-mx`,`Fr-fr`,`It-it`,`Pt-pt`,`El-gr`," + \ "`Ru-ru`,`Tr-tr`,`Zh-cn`,`Ja`, `Pl` FROM Lan_Results WHERE id = '%s'" % (q.from_user.id) result = read_db(sql_read) if result is not None: # array of (language_name, language_id, language_count) sorted_languages = sorted( [(LAN.items()[i][0], LAN.items()[i][1], result[0][i]) for i in range(len(LAN))], key=itemgetter(2), reverse=True) if not isArabic(q.query): for i in range(len(sorted_languages)): inline_results.append( types.InlineQueryResultVoice(str(cont), magic + sorted_languages[i][1], sorted_languages[i][0], reply_markup=markup)) cont += 1 else: language_id = 0 for i in range(len(sorted_languages)): if 'Ar' in sorted_languages[i][1]: language_id = i inline_results.append( types.InlineQueryResultVoice( str(language_id + 1), magic + sorted_languages[language_id][1], sorted_languages[language_id][0], reply_markup=markup)) else: if not isArabic(q.query): for key, val in LAN.items(): inline_results.append( types.InlineQueryResultVoice(str(cont), magic + val, key, reply_markup=markup)) cont += 1 else: inline_results.append( types.InlineQueryResultVoice(str(cont), magic + LAN.items()[0][1], LAN.items()[0][0], reply_markup=markup)) try: bot.answer_inline_query(q.id, inline_results, cache_time=1) except Exception as e: exc_message = str(e) + ' | query: "' + q.query + '"' record_exception(exc_message) bot.send_message(6216877, exc_message)
from config import config from telebot import TeleBot, types conn = sqlite3.connect(config.get('db')) cur = conn.cursor() cur.execute("SELECT * FROM voices;") voices = cur.fetchall() texts = [v[2] for v in voices] i = 1 default_voices = [] for v in voices: voice_url = config.get('baseurl') + v[1] r = types.InlineQueryResultVoice(i, voice_url, v[2]) default_voices.append(r) i += 1 bot = TeleBot(config.get('token')) @bot.message_handler(commands=['help']) def command_help(message): response = ''.join([ 'Первый войсостикерпак!\n', 'Спасибо за голос @LonerNya, за материалы – @RpRICE\n', '\n', 'https://github.com/KristobalJunta/LonerBot' ]) bot.send_message(message.chat.id, response)