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="Бдыщь")
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)
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')
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)
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])
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)
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
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)
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]:
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