示例#1
0
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)
示例#2
0
    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
示例#3
0
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)
示例#4
0
文件: bot.py 项目: duhow/rajoyBot
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)
示例#5
0
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
示例#6
0
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)
示例#7
0
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)
示例#8
0
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)
示例#9
0
文件: bot.py 项目: duhow/rajoyBot
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)
示例#10
0
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)
示例#11
0
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)