def inlineQuery(update, context): query, user_data = update.inline_query, context.user_data userid = query.from_user['id'] term = query.query _ = getTranslation(userid) ownLists = [] user_data['tester'] = helpFuncs.id_generator(size=5) if len(term) == 0: ownLists = dbFuncs.getOwnLists(userid) else: ownLists = dbFuncs.getLikelyLists("%{0}%".format(term), userid) resultList = [] threads = [] for ownlist in ownLists: temp = List(ownlist[0]) resultList.append( InlineQueryResultArticle( id=temp.id, title=temp.name, description=temp.id, thumb_url= "http://icons.iconarchive.com/icons/google/noto-emoji-objects/1024/62930-clipboard-icon.png", reply_markup=createKeyboard(temp, -1), input_message_content=InputTextMessageContent( message_text=str(temp) + " `{0}`".format(user_data['tester']), parse_mode='Markdown', disable_web_page_preview=False))) query.answer(results=resultList, cache_time=0, switch_pm_text=_("newlist"), switch_pm_parameter="new")
def rcvMessage(update, context): message, bot, user_data = update.message, context.bot, context.user_data userid = message.from_user['id'] tester = message.text[-5:] if 'tester' in user_data and user_data['tester'] == tester: user_data['list'] = message.text.split("/")[-1][:10] todolist = List(user_data['list']) user_data['old'] = dbFuncs.getSpecificMessage(user_data['list'], userid)[0] if helpFuncs.isInt(user_data['old']): try: bot.edit_message_text(chat_id=userid, message_id=user_data['old'], text='↓') except Exception as e: logger.info(repr(e)) else: try: bot.edit_message_text(inline_message_id=user_data['old'], text='↓') except Exception as e: logger.info(repr(e)) count = 2 while 'imid' not in user_data and count != 0: sleep(1) count -= 1 try: dbFuncs.updateSpecificMessage(user_data['list'], userid, user_data['imid']) dbFuncs.removeInlineMessage(user_data['imid']) except Exception as e: logger.info(repr(e)) else: _ = getTranslation(userid) if 'list' not in user_data: message.reply_text(_("notspecified")) return todolist = List(user_data['list']) items = message.text.split("\n") try: todolist.addItems(items, userid, message.message_id) except StopIteration as error: message.reply_text(_("buttonlimit")) updateMessages(bot, todolist) temp = user_data['list'] user_data.clear() user_data['list'] = temp
def editMessage(update, context): message, bot = update.edited_message, context.bot try: code = dbFuncs.editItems(message.text.split("\n"), message.from_user['id'], message.message_id) updateMessages(bot, List(code)) except Exception as e: logger.info(repr(e))
def backup(update, context): message, bot = update.message, context.bot userid = message.from_user['id'] logger.info("Backing up lists for {}".format(userid)) ownlists = dbFuncs.getOwnedLists(userid) if not ownlists: _ = getTranslation(userid) message.reply_text(_("notownedlists")) backuplist = [] for ownlist in ownlists: backuplist.append(List(ownlist[0])) with open('{0}/do2backup.json'.format(backupsDir), 'w+') as file: jdump(backuplist, file) with open('{0}/do2backup.json'.format(backupsDir), 'rb') as file: bot.send_document(chat_id=message.from_user['id'], document=file)
def rcvReply(update, context): message, replymsg, bot = update.message, update.message.reply_to_message, context.bot userid, replyid = message.from_user['id'], replymsg.message_id _ = getTranslation(userid) items_from_reply = dbFuncs.getItemsByEdit(userid, replyid) if len(items_from_reply) > 1: message.reply_text(_("notunique")) return ConversationHandler.END corelist = List(items_from_reply[0][1]) items = message.text.split("\n") if not userid in corelist.coworkers or not userid == corelist.owner: message.reply_text(_("notallowed")) return ConversationHandler.END try: corelist.addSubItems(items_from_reply[0][0], items, userid, replyid) except StopIteration as error: message.reply_text(text=error) updateMessages(bot, corelist)
def pushAdmin(update, context): query, bot = update.callback_query, context.bot userid = query.from_user['id'] _ = getTranslation(userid) if query.message: msgid = query.message.message_id else: msgid = query.inline_message_id action = query.data.split("_") if action[1] == Options[OptionsOrder[0]]: dbFuncs.toggleListOpen(action[0], not dbFuncs.isOpen(action[0])) bot.answer_callback_query( callback_query_id=query.id, text=_("listaccess").format( _("open") if dbFuncs.isOpen(action[0]) else _("closed"))) if helpFuncs.isInt(msgid): bot.edit_message_reply_markup(chat_id=userid, message_id=msgid, reply_markup=createAdminKeyboard( action[0], userid)) else: bot.edit_message_reply_markup(inline_message_id=msgid, reply_markup=createAdminKeyboard( action[0], userid)) elif action[1] == Options[OptionsOrder[1]] or action[1] == Options[ OptionsOrder[2]]: dbFuncs.sortList(action[0], action[1]) bot.answer_callback_query(callback_query_id=query.id, text=_("itemsrearranged")) elif action[1] == Options[OptionsOrder[3]]: if helpFuncs.isInt(msgid): bot.edit_message_reply_markup(chat_id=userid, message_id=msgid, reply_markup=createOldKeyboard( action[0], userid)) else: bot.edit_message_reply_markup(inline_message_id=msgid, reply_markup=createOldKeyboard( action[0], userid)) dbFuncs.toggleAdminKeyboard(action[0]) bot.answer_callback_query(callback_query_id=query.id) return ConversationHandler.END updateMessages(bot, List(action[0])) return SETTINGS
def setName(update, context): message, user_data = update.message, context.user_data try: newList = List.new(message.text, message.from_user['id'], message.from_user['first_name']) except OverflowError as error: message.reply_text(str(error)) return SETNAME except NameError as error: message.reply_text(str(error)) return ConversationHandler.END except Exception as error: logger.warn(repr(error)) return SETNAME user_data['list'], user_data['current'] = newList.id, message.reply_text( str(newList), parse_mode="Markdown", disable_web_page_preview=True, reply_markup=createKeyboard(newList, newList.owner.id)).message_id dbFuncs.updateOwner(newList.id, user_data['current']) return ConversationHandler.END
def start(update, context): logger.info("Start triggered") message, args, bot, user_data = update.message, context.args, context.bot, context.user_data userid = message.from_user['id'] _ = getTranslation(userid) if not args: message.reply_text(_("welcome"), parse_mode='Markdown') else: if len(args[0]) != 10: if args[0] == "new": return new(update, context) message.reply_text(_("invalidargs")) try: todolist = List(args[0]) except KeyError as error: message.reply_text(_(error)) else: code = todolist.id if userid not in todolist.coworkers: if userid == todolist.owner: msgno = dbFuncs.getSpecificMessage(code, userid)[0] try: if helpFuncs.isInt(msgno): bot.edit_message_text(chat_id=message.chat_id, message_id=msgno, text="↓") else: bot.edit_message_text(inline_message_id=msgno, text="↓") except Exception as e: logger.info(repr(e)) print("Malicious message number") user_data['list'], user_data[ 'current'] = code, message.reply_text( str(todolist), parse_mode='Markdown', disable_web_page_preview=True, reply_markup=createKeyboard(todolist, userid)).message_id dbFuncs.toggleAdminKeyboard(code) dbFuncs.updateOwner(code, user_data['current']) elif not dbFuncs.isOpen(code): message.reply_text(_("notopen")) else: user_data['list'], user_data[ 'current'] = code, message.reply_text( str(todolist), parse_mode='Markdown', disable_web_page_preview=True, reply_markup=createKeyboard(todolist, userid)).message_id todolist.addCoworker(userid, message.from_user['first_name'], user_data['current']) updateMessages(bot, todolist) else: user_data['list'], user_data[ 'current'] = code, message.reply_text( str(todolist), parse_mode='Markdown', disable_web_page_preview=True, reply_markup=createKeyboard(todolist, userid)).message_id bot.edit_message_text(chat_id=message.chat_id, message_id=dbFuncs.getSpecificMessage( code, userid)[0], text="↓") dbFuncs.updateCoworker(code, userid, user_data['current']) return ConversationHandler.END
def chosenQuery(update, context): result, bot = update.chosen_inline_result, context.bot context.user_data['imid'] = result.inline_message_id dbFuncs.insertInlineMessage(result.result_id, result.inline_message_id) sleep(1) updateMessages(bot, List(result.result_id))
def pushInline(update, context): query, bot, user_data = update.callback_query, context.bot, context.user_data print(query.data) userid = query.from_user['id'] _ = getTranslation(userid) action = query.data.split("_") print(str(action)) todolist = List(action[0]) if not action[1] == ListFooter["Remove"]: user_data.pop('closing', None) if not userid == todolist.owner and userid not in todolist.coworkers: bot.answer_callback_query(callback_query_id=query.id, text=_("notallowed")) return ConversationHandler.END if action[1] == ListFooter["Check"]: if not todolist.toggleItem(int(action[2])): logger.warn("Item {} in list {} not toggled".format( action[2], action[0])) # Do something when this doesn't work elif action[1] == ListFooter["CheckSub"]: if not todolist.toggleSubItem(int(action[2])): logger.warn("Subitem {} in list {} not toggled".format( action[2], action[0])) # Do something when this doesn't work elif action[1] == ListFooter["Exit"]: bot.edit_message_text(chat_id=userid, message_id=dbFuncs.getSpecificMessage( action[0], userid)[0], text=_("revoked")) todolist.deleteCoworker(userid) updateMessages(bot, todolist) bot.answer_callback_query(callback_query_id=query.id, text=_("leftlist")) return ConversationHandler.END elif action[1] == ListFooter["Remove"]: check = False if todolist.items: temp = todolist.items[0].done for item in todolist.items: if item.done != temp: check = True break if check: todolist.deleteDones() else: if 'closing' in user_data and user_data['closing'] == action[0]: updateMessages(bot, todolist, "Closed") todolist.deleteList() bot.answer_callback_query(callback_query_id=query.id, text=_("listremoved")) else: user_data['closing'] = action[0] bot.answer_callback_query(callback_query_id=query.id, text=_("confirmremove"), show_alert=True) return ConversationHandler.END elif action[1] == ListFooter["Options"]: if query.inline_message_id: bot.edit_message_reply_markup( inline_message_id=query.inline_message_id, reply_markup=createAdminKeyboard(action[0], userid)) else: bot.edit_message_reply_markup(chat_id=userid, message_id=query.message.message_id, reply_markup=createAdminKeyboard( action[0], userid)) dbFuncs.toggleAdminKeyboard(action[0], True) bot.answer_callback_query(callback_query_id=query.id) return SETTINGS else: return pushAdmin(update, context) updateMessages(bot, todolist) bot.answer_callback_query(callback_query_id=query.id) return ConversationHandler.END