コード例 #1
0
ファイル: chernovik.py プロジェクト: Stunez/locbot
def callback_inline(call):
    # Если сообщение из чата с ботом
    if call.message:
        if call.data == "test":
            bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="Пыщь")
    # Если сообщение из инлайн-режима
    elif call.inline_message_id:
        if call.data == "test":
            bot.edit_message_text(inline_message_id=call.inline_message_id, text="Бдыщь")
コード例 #2
0
def process_frequency(bot, update):
    query = update.callback_query
    bot.edit_message_text(text="{}\n{}".format(query.message.text, query.data),
                          chat_id=query.message.chat_id,
                          message_id=query.message.message_id)
    chat = chat_storage.get_or_create(query.message.chat_id)
    chat['frequency'] = query.data
    chat_storage.save(chat)
    send_intro(bot, query.message.chat_id)
コード例 #3
0
def process_export(bot, update):
    query = update.callback_query
    bot.edit_message_text(
        text="{} {}".format(query.message.text, query.data), chat_id=query.message.chat_id,
        message_id=query.message.message_id)
    if query.data == 'png':
        quizes = quiz_storage.get_completed_quizes(query.message.chat_id)
        plot = get_quizes_plot(quizes)
        bot.send_photo(chat_id=query.message.chat_id, photo=plot)
    if query.data == 'csv':
        quizes = quiz_storage.get_completed_quizes(query.message.chat_id, limit=999)
        csv_buf = get_csv(quizes)
        bot.send_document(chat_id=query.message.chat_id, document=csv_buf, filename='m00d.csv')
コード例 #4
0
def process_answer(bot, update):
    query = update.callback_query
    bot.edit_message_text(
        text="{}\n{}".format(query.message.text, query.data), chat_id=query.message.chat_id,
        message_id=query.message.message_id)
    quiz = quiz_storage.get_latest_quiz(query.message.chat_id)
    quiz_storage.save_answer(quiz, int(query.data))
    if quiz.is_completed:
        bot.send_message(chat_id=query.message.chat_id, text="🏁\n{}".format(quiz.get_result()))
    else:
        question = quiz.get_question()
        if quiz.type_ == 'hars':
            send_hars_question(question, bot, query.message.chat_id)
        else:
            send_madrs_question(question, bot, query.message.chat_id)
コード例 #5
0
def process_answer(bot, update):
    #ASS added quiz_answer to send individual weights for every question:
    query = update.callback_query
    quiz = quiz_storage.get_latest_quiz(query.message.chat_id)
    quiz_storage.save_answer(quiz, int(query.data))
    lang = chat_storage.get_or_create(query.message.chat_id)['language']
    if quiz.type_ == 'hars':
        bot.edit_message_text(
            text="{}\n{}".format(query.message.text, query.data), chat_id=query.message.chat_id,
            message_id=query.message.message_id)
        if quiz.is_completed: #ASS have added and hars
            bot.send_message(chat_id=query.message.chat_id, text="🏁\n{}".format(quiz.get_result()))
        else:
            question = quiz.get_question()
            answer_weight = quiz.get_answers_weight()
            send_hars_question(question, answer_weight, bot, query.message.chat_id)
    if quiz.type_ == 'amiready':
        n = int(query.data)
        quiz.process_direction(n)
        question = quiz.get_direction()
        send_amiready_question(question, bot, query.message.chat_id)
    if quiz.type_ == 'criticism':
         n = int(query.data)
         if quiz.question_number == 2:
             if n ==0:
                 send_yes_no_keyboard(bot, chat_id = query.message.chat_id, qs_key = texts.CRITICISM_Q[lang][1])
             else:
                 bot.send_message(chat_id=query.message.chat_id, text= texts.CRIT_An[lang])
         if quiz.question_number == 3:
             if n==0:
                 send_yes_no_keyboard(bot, chat_id = query.message.chat_id, qs_key = texts.CRITICISM_Q[lang][2])
             else:
                 bot.send_message(chat_id=query.message.chat_id, text= texts.CRIT_An[lang])
         if quiz.question_number == 4:
             if n== 0:
                 bot.send_message(chat_id=query.message.chat_id, text=texts.CRITICISM_Q[lang][3])
             else:
                 bot.send_message(chat_id=query.message.chat_id, text=texts.CRIT_An[lang])
コード例 #6
0
ファイル: bot.py プロジェクト: madina1997/diary-bot
def process_answer(bot, update):
    #ASS added quiz_answer to send individual weights for every question:
    query = update.callback_query
    quiz = quiz_storage.get_latest_quiz(query.message.chat_id)
    quiz_storage.save_answer(quiz, int(query.data))
    if quiz.type_ == 'hars':
        bot.edit_message_text(text="{}\n{}".format(query.message.text,
                                                   query.data),
                              chat_id=query.message.chat_id,
                              message_id=query.message.message_id)
        if quiz.is_completed:  #ASS have added and hars
            bot.send_message(chat_id=query.message.chat_id,
                             text="🏁\n{}".format(quiz.get_result()))
        else:
            question = quiz.get_question()
            answer_weight = quiz.get_answers_weight()
            send_hars_question(question, answer_weight, bot,
                               query.message.chat_id)
    elif quiz.type_ == 'amiready':
        n = int(query.data)
        quiz.process_direction(n)
        question = quiz.get_direction()
        send_amiready_question(question, bot, query.message.chat_id)
コード例 #7
0
ファイル: bot.py プロジェクト: danieltan2018/laundrybot
def callbackquery(update, context):
    query = update.callback_query
    data = query.data
    id = str(query.message.chat_id)
    # Activated from selecting a room
    if data.startswith('ROOM='):
        data = data.replace('ROOM=', '')
        # Save user's room selection to file
        global users
        users[id] = data
        with open('users.json', 'w') as usersfile:
            json.dump(users, usersfile)
        msg = 'You have selected *{}*.\n\nWhat would you like to do?'.format(
            data)
        keyboard = [[
            InlineKeyboardButton("Check Available Washers",
                                 callback_data='available')
        ], [InlineKeyboardButton("Notify when Done", callback_data='notify')
            ], [InlineKeyboardButton("Join Queue", callback_data='queue')]]
        keyboard = InlineKeyboardMarkup(keyboard)
        # Overwrite the room selection message
        bot.edit_message_text(chat_id=id,
                              message_id=query.message.message_id,
                              text=msg,
                              reply_markup=keyboard,
                              parse_mode=telegram.ParseMode.MARKDOWN)
    elif data == 'available':
        # From "Check Available Washers" button
        room = users[id]
        available = getavailable(room)
        count = len(available)
        msg = '*There are {} available washers:*\n'.format(count)
        for item in available:
            msg += item + '\n'
        send(id, msg, [])
    elif data == 'notify':
        # From "Notify when Done" button
        room = users[id]
        active = []
        for washer in rooms[room]:
            if machines[washer]['state'] == 1:
                active.append(washer)
        if len(active) < 1:
            # Pop-up notification instead of sending message
            context.bot.answer_callback_query(
                query.id,
                text='No active washers to notify about.',
                show_alert=True)
            return
        active.sort()
        msg = 'Please select a washer to receive notification about:'
        keyboard = []
        for item in active:
            keyboard.append([
                InlineKeyboardButton(item,
                                     callback_data='WASHER={}'.format(item))
            ])
        send(id, msg, keyboard)
    elif data.startswith('WASHER='):
        washer = data.replace('WASHER=', '')
        global watch
        if washer not in watch:
            watch[washer] = {}
        watch[washer][id] = None
        with open('watch.json', 'w') as watchfile:
            json.dump(watch, watchfile)
        context.bot.answer_callback_query(
            query.id,
            text='You will be notified when {} completes.'.format(washer),
            show_alert=True)
        return
    elif data == 'queue':
        global queue
        room = users[id]
        available = getavailable(room)
        if len(available) > 0:
            context.bot.answer_callback_query(
                query.id,
                text='No need to queue, there are available washers.',
                show_alert=True)
        elif id in queue[room]:
            context.bot.answer_callback_query(
                query.id,
                text='You are already in the queue.',
                show_alert=True)
        else:
            count = len(queue[room])
            queue[room].append(id)
            with open('queue.json', 'w') as queuefile:
                json.dump(queue, queuefile)
            context.bot.answer_callback_query(
                query.id,
                text='Added to queue. There are {} people ahead of you.'.
                format(count),
                show_alert=True)
        return
    context.bot.answer_callback_query(query.id)
    return
コード例 #8
0
ファイル: start.py プロジェクト: ayazzali/FAQ_KAI_Bot
def giveAnswer(bot, update):
    print('[giveAnswer]:')
    query = update.callback_query
    print('[giveAnswer]' + query.message.text)
    # query = update.callback_query
    message_id_Of_user_text = query.data.split(';')[0]
    if query.data.find(';') != -1:
        fma = For_more_answers().Decompress(query.data)
        t = Db().ExecuteSingle(
            DB_NAME, "SELECT Text FROM " + T_TELEGRAM_MESSAGES +
            " WHERE message_id=" + fma.message_id_from_usersText)

        results = search(t[0], T_Question_Answer,
                         QUESTION)  # TODO: поменять бд
        results = sorted(results, key=lambda k: k['matchedCount'])
        fma_answer_ids = [f.split(',')[0] for f in fma.messages]
        fma_messages_ids = [
            f.split(',')[1] for f in fma.messages if f.split(',')[1] != ''
        ]  # used not now
        sort = []
        for x in results:
            alredy_exists = False
            for fmm_id in fma_answer_ids:
                if int(fmm_id) == x['question'][0]:
                    alredy_exists = True
                    break
            if not alredy_exists:
                sort.append(x)

        sort = sort[:-4:-1]

        for i, item in enumerate(sort):
            keyboard = [[
                InlineKeyboardButton("Показать ответ:",
                                     callback_data=item['question'][0])
            ]]
            reply = InlineKeyboardMarkup(keyboard)
            t = item['question'][1]
            try:
                bot.edit_message_text(
                    text=str(t),
                    chat_id=query.message.chat_id,
                    message_id=int(fma_messages_ids[i]),  #TODO think
                    reply_markup=reply)
            except BaseException:
                print('BaseException')
            fma.messages.append(str(item['question'][0]) + ',')

        gg = fma.Compress_for_recieve()
        if gg == query.data:
            if len(sort) == 0:
                print("больше нечего выдавать")
                pass
            keyboard = [[
                InlineKeyboardButton("Больше нет :(", callback_data=gg)
            ]]
        else:
            keyboard = [[
                InlineKeyboardButton("Показать еще!", callback_data=gg)
            ]]  # TODO: ссылка на мессадж
        reply = InlineKeyboardMarkup(keyboard)
        try:
            bot.edit_message_text(text="____У нас есть еще:)_____",
                                  chat_id=query.message.chat_id,
                                  message_id=query.message.message_id,
                                  reply_markup=reply)
        except BaseException:
            print("Дошли до предела callback_data")
            bot.edit_message_text(text="____ЭТО КОНЕЦ :(_____",
                                  chat_id=query.message.chat_id,
                                  message_id=query.message.message_id)
    else:
        #print(update.message.chat.username+' [giveAnswer]'+'\r\n'+query.message.text+'\r\n')
        t = '<b>' + query.message.text + '</b> \r\n' + Db().GetByColumnName(
            'db_001.db', 'T_Question_Answer', 'id', query.data)[0][2]
        bot.edit_message_text(text=t,
                              chat_id=query.message.chat_id,
                              message_id=query.message.message_id,
                              parse_mode=ParseMode.HTML)
コード例 #9
0
            for stuff in s_p.obsolete():
                stuff_notice_date = datetime.datetime.strptime(
                    db.get_notice_date(notice_category, stuff), '%Y-%m-%d')
                tdelta = datetime.datetime.today() - stuff_notice_date
                if tdelta.days > 180:
                    #등록 뒤 180일을 초과한 시간이 지난 공지만 삭제 또는 열람 불가 처리
                    #코드 작성 시점에서는 Telegram 메신저 자체의 정책으로 봇 계정은 작성 뒤 48시간 이내의 메시지만 삭제할 수 있음
                    message_id = str(db.get_msg_id(notice_category, stuff))
                    try:
                        bot.delete_message(chat_id=channel,
                                           message_id=message_id)
                    except:
                        try:
                            bot.edit_message_text(
                                text=
                                '#obsolete\n오래된 공지입니다.\n다시 보려면 학교 누리집을 방문해주십시오.',
                                chat_id=channel,
                                message_id=message_id)
                            db.del_notice(notice_category, stuff)
                        except:
                            pass

        new_pinned.clear()
        check_pinned.clear()

        check_normal = db.get_notices(str(cat + '_Normal'))
        s_n = sieve(new_data=list(new_normal.keys()), check_data=check_normal)

        if s_n.new():
            notice_category = str(cat + '_Normal')
            for short_link in s_n.new()[::-1]:
コード例 #10
0
def callbackquery(update, context):
    query = update.callback_query
    data = query.data
    user_id = str(query.from_user.id)
    global users
    if user_id not in users:
        context.bot.answer_callback_query(query.id,
                                          url='t.me/lifeyf_bot?start=1')
        return
    global checkin
    global checkout
    if data == 'checkin':
        now = datetime.now().strftime('%H:%M:%S')
        today = date.today().strftime('%d %b %Y')
        name = users[user_id]['name']
        v1 = name
        v2 = users[user_id]['phone']
        v3 = now
        v4 = ''
        if name in checkin[today]:
            context.bot.answer_callback_query(
                query.id,
                text='Error: you are already checked in.',
                show_alert=True)
            with open('tracing.txt', 'a+') as tracing:
                tracing.write(v1 + ',' + v2 + ',' + v3 + ',' + v4 +
                              ',Temporary / Duplicate' + '\n')
            return
        checkin[today][name] = now
        with open('checkin.json', 'w') as checkinfile:
            json.dump(checkin, checkinfile)
        with open('tracing.txt', 'a+') as tracing:
            tracing.write(v1 + ',' + v2 + ',' + v3 + ',' + v4 + ',Temporary' +
                          '\n')
        sheetappend([today, v1, v2, v3, v4, 'Temporary'])
        context.bot.answer_callback_query(query.id,
                                          text='Welcome, {}!'.format(name),
                                          show_alert=True)
        countin = str(len(checkin[today]))
        countout = str(len(checkout[today]))
        msg = '*YF Contact Tracing* ({})\n\n{}\n\n_{} checked in_\n_{} checked out_'.format(
            today, declaration, countin, countout)
        keyboard = InlineKeyboardMarkup(
            [[InlineKeyboardButton('CHECK IN', callback_data='checkin')],
             [InlineKeyboardButton('CHECK OUT', callback_data='checkout')]])
        bot.edit_message_text(chat_id=channel,
                              message_id=query.message.message_id,
                              text=msg,
                              reply_markup=keyboard,
                              parse_mode=telegram.ParseMode.MARKDOWN)
    elif data == 'checkout':
        now = datetime.now().strftime('%H:%M:%S')
        today = date.today().strftime('%d %b %Y')
        name = users[user_id]['name']
        if name not in checkin[today]:
            context.bot.answer_callback_query(
                query.id,
                text='Error: you are not checked in.',
                show_alert=True)
            return
        v1 = name
        v2 = users[user_id]['phone']
        v3 = checkin[today][name]
        v4 = now
        if name in checkout[today]:
            context.bot.answer_callback_query(
                query.id,
                text='Error: you are already checked out.',
                show_alert=True)
            with open('tracing.txt', 'a+') as tracing:
                tracing.write(v1 + ',' + v2 + ',' + v3 + ',' + v4 +
                              ',Duplicate' + '\n')
            return
        checkout[today][name] = now
        with open('checkout.json', 'w') as checkoutfile:
            json.dump(checkout, checkoutfile)
        with open('tracing.txt', 'a+') as tracing:
            tracing.write(v1 + ',' + v2 + ',' + v3 + ',' + v4 + '\n')
        sheetappend([today, v1, v2, v3, v4])
        context.bot.answer_callback_query(query.id,
                                          text='Goodbye, {}!'.format(name),
                                          show_alert=True)
        countin = str(len(checkin[today]))
        countout = str(len(checkout[today]))
        msg = '*YF Contact Tracing* ({})\n\n{}\n\n_{} checked in_\n_{} checked out_'.format(
            today, declaration, countin, countout)
        keyboard = InlineKeyboardMarkup(
            [[InlineKeyboardButton('CHECK IN', callback_data='checkin')],
             [InlineKeyboardButton('CHECK OUT', callback_data='checkout')]])
        bot.edit_message_text(chat_id=channel,
                              message_id=query.message.message_id,
                              text=msg,
                              reply_markup=keyboard,
                              parse_mode=telegram.ParseMode.MARKDOWN)
    else:
        context.bot.answer_callback_query(query.id,
                                          url='t.me/lifeyf_bot?start=1')
    return