Esempio n. 1
0
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")
Esempio n. 2
0
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
Esempio n. 3
0
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))
Esempio n. 4
0
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)
Esempio n. 5
0
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)
Esempio n. 6
0
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
Esempio n. 7
0
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
Esempio n. 8
0
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
Esempio n. 9
0
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))
Esempio n. 10
0
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