Ejemplo n.º 1
0
def my_tacos_callback(update, context):  # shows users taco-balance
    cid = get_cid(update)
    chat = Chats.get(Chats.cid == cid)
    store_name(update)

    uid = str(get_uid(update))
    tacos = Tacos.get(Tacos.chat == chat.id)

    balances = json.loads(tacos.taco_balance)

    if uid in balances.keys():
        balance = balances.get(uid)
    else:
        balances.update({uid: default_amount})
        tacos.taco_balance = json.dumps(balances)
        tacos.save()
        balance = default_amount

    if balance < 25:
        comment = balance_comment_low
    elif balance > 60:
        comment = balance_comment_high
    else:
        comment = balance_comment_medium

    update.message.reply_text(balance_phrase.format(balance, comment),
                              parse_mode=ParseMode.HTML)
Ejemplo n.º 2
0
def my_tacos_callback(bot, message):
    """ shows users taco-balance """

    cid = get_cid(message)
    uid = str(get_uid(message))

    with db:
        chat = Chats.get(Chats.cid == message.chat.id)
        tacos = Tacos.get(Tacos.chat == cid)
        balances = tacos.taco_balance

    delete_message(bot, message)

    user_name = store_name(message.from_user)

    if uid in balances.keys():
        balance = balances.get(uid)
    else:
        balances.update({uid: default_taco_amount})
        tacos.taco_balance = balances
        tacos.save()
        balance = default_taco_amount

    if chat.less is True:
        comment = ''
    else:
        if balance < 25:
            comment = balance_comment_low
        elif balance > 60:
            comment = balance_comment_high
        else:
            comment = balance_comment_medium

    if chat.autohide:
        msg = bot.send_message(chat_id=cid,
                               text=balance_phrase.format(user_name,
                                                          balance,
                                                          comment),
                               reply_to_message_id=get_mid(message),
                               parse_mode='html')

        time = datetime.datetime.now() + datetime.timedelta(minutes=chat.autohide_delay)

        sched.add_job(delete_message, 'date', run_date=time, args=[bot, msg])

    else:
        ok_button = InlineKeyboardButton('OK', callback_data='delete:{}'.format(message.from_user.id))
        ok_keyboard = InlineKeyboardMarkup([[ok_button]])

        msg = bot.send_message(chat_id=cid,
                               text=balance_phrase.format(user_name,
                                                          balance,
                                                          comment),
                               reply_to_message_id=get_mid(message),
                               reply_markup=ok_keyboard,
                               parse_mode='html')

    chat.mids = [msg.message_id]
    chat.save()
Ejemplo n.º 3
0
def taco_top_callback(bot, message):
    """ shows top-5(or less) taco-users in chat """

    cid = get_cid(message)
    mid = get_mid(message)
    store_name(message)

    chat = Chats.get(Chats.cid == message.chat.id)
    clean_chat(chat.mids, chat.cid, message, bot)

    ok_button = InlineKeyboardButton('OK',
                                     callback_data='delete:{}'.format(
                                         message.from_user.id))
    ok_keyboard = InlineKeyboardMarkup([[ok_button]])

    tacos = Tacos.get(Tacos.chat == cid)

    balances = json.loads(tacos.taco_balance)

    if len(balances) == 0:  # in case tacos-table is empty
        bot.send_message(text=empty_top_phrase,
                         chat_id=cid,
                         reply_to_message_id=mid,
                         reply_markup=ok_keyboard,
                         parse_mode='html')
        return

    top = list()

    while len(balances) > 0 and len(top) < 5:
        top_uid = max(balances, key=balances.get)
        username = resolve_name(top_uid)
        top.append([username, balances.get(top_uid)])
        del balances[top_uid]

    formatted_top = ''
    for user in top:
        if "@" in user[0]:
            user_link = "https://t.me/{}".format(user[0][1:])
        else:
            user_link = "tg://user?id={}".format(user[0])

        formatted_top += '{}. <a href="{}">{}</a> - <code>{}</code> tacos!\n'.format(
            top.index(user) + 1, user_link, user[0][1:], user[1])

    mid = bot.send_message(text=taco_top_phrase.format(len(top),
                                                       formatted_top),
                           chat_id=cid,
                           reply_to_message_id=mid,
                           reply_markup=ok_keyboard,
                           parse_mode='html',
                           disable_web_page_preview=True).message_id

    chat.mids = json.dumps([mid])
    chat.save()
Ejemplo n.º 4
0
def self_kick_callback(
        update, context):  # if bot gets kicked it erases all data for chat
    cid = get_cid(update)

    chat = Chats.select().where(Chats.cid == cid)

    if chat.exists():
        chat = chat.get()
        invited_by = chat.invited_by

        tacos = Tacos.select().where(Tacos.chat == chat.id)
        if tacos.exists():
            Tacos.get(Tacos.chat == chat.id).delete_instance()
        chat.delete_instance()

        try:
            chat_title = update.effective_message.chat.title
            context.bot.send_message(invited_by,
                                     data_deleted_phrase.format(chat_title),
                                     parse_mode=ParseMode.HTML)
        except Unauthorized:
            pass  # user deleted bot or didnt /start it
Ejemplo n.º 5
0
def my_tacos_callback(bot, message):
    """ shows users taco-balance """

    cid = get_cid(message)
    chat = Chats.get(Chats.cid == message.chat.id)

    clean_chat(chat.mids, chat.cid, message, bot)

    store_name(message)

    uid = str(get_uid(message))
    tacos = Tacos.get(Tacos.chat == cid)

    ok_button = InlineKeyboardButton('OK',
                                     callback_data='delete:{}'.format(
                                         message.from_user.id))
    ok_keyboard = InlineKeyboardMarkup([[ok_button]])

    balances = json.loads(tacos.taco_balance)

    if uid in balances.keys():
        balance = balances.get(uid)
    else:
        balances.update({uid: default_taco_amount})
        tacos.taco_balance = json.dumps(balances)
        tacos.save()
        balance = default_taco_amount

    if chat.less is True:
        comment = ''
    else:
        if balance < 25:
            comment = balance_comment_low
        elif balance > 60:
            comment = balance_comment_high
        else:
            comment = balance_comment_medium

    mid = bot.send_message(chat_id=cid,
                           text=balance_phrase.format(balance, comment),
                           reply_to_message_id=get_mid(message),
                           reply_markup=ok_keyboard,
                           parse_mode='html').message_id

    chat.mids = json.dumps([mid])
    chat.save()
Ejemplo n.º 6
0
def taco_top_callback(update,
                      context):  # shows top-5(or less) taco-users in chat
    cid = get_cid(update)
    store_name(update)

    chat = Chats.get(Chats.cid == cid)
    tacos = Tacos.get(Tacos.chat == chat.id)

    b = json.loads(tacos.taco_balance)

    if len(b) == 0:  # in case tacos-table is empty
        update.message.reply_text(empty_top_phrase, parse_mode=ParseMode.HTML)
        return

    balances = list()
    for balance in b.keys():
        balances.append([balance, b.get(balance)])

    top = list()

    while len(balances) > 0 and len(top) < 5:  # classical sort by value
        mx_value = -1
        for k in range(len(balances)):
            if balances[k][1] >= mx_value:
                mx_user = k
        top.append(balances[mx_user])
        del balances[mx_user]

    for user in top:  # resolving usernames for top-table
        user[0] = resolve_name(user[0])

    formatted_top = ''
    for user in top:
        formatted_top += '{}. {} - <code>{}</code> tacos!\n'.format(
            top.index(user) + 1, user[0], user[1])

    update.message.reply_text(taco_top_phrase.format(len(top), formatted_top),
                              parse_mode=ParseMode.HTML)
Ejemplo n.º 7
0
def give_tacos(bot, message, sender, receiver):
    cid = get_cid(message)
    tacos = Tacos.get(Tacos.chat == cid)

    chat = Chats.get(Chats.cid == message.chat.id)

    ok_button = InlineKeyboardButton('OK',
                                     callback_data='delete:{}'.format(
                                         message.from_user.id))
    ok_keyboard = InlineKeyboardMarkup([[ok_button]])

    sender_name = store_name(sender)
    receiver_name = store_name(receiver)

    if receiver.is_bot:
        if chat.less is True:
            text = no_bots_allowed_phrase.split('\n')[0]
        else:
            text = no_bots_allowed_phrase
        mid = bot.send_message(chat_id=cid,
                               text=text,
                               reply_to_message_id=get_mid(message),
                               reply_markup=ok_keyboard,
                               parse_mode='html').message_id

        chat.mids = [mid]
        chat.save()
        return

    sender_id = str(sender.id)
    receiver_id = str(receiver.id)

    if sender_id == receiver_id:
        if chat.less is True:
            text = self_tacoing_phrase.split('\n')[0]
        else:
            text = self_tacoing_phrase
        mid = bot.send_message(chat_id=cid,
                               text=text,
                               reply_to_message_id=get_mid(message),
                               parse_mode='html').message_id

        chat.mids = [mid]
        chat.save()
        return

    tacos_sent = len(re.findall(taco_emoji, message.text))

    txt = message.text
    if message.entities is not None:
        for entity in message.entities:
            txt = txt[:entity.offset] + txt[entity.offset + entity.length:]
    txt = txt.replace(taco_emoji, '')
    user_comment = txt.lstrip(' ')

    if tacos.taco_balance is None:
        amounts = dict()
        amounts.update({sender_id: default_taco_amount})
        amounts.update({receiver_id: default_taco_amount})
    else:
        amounts = tacos.taco_balance
        if sender_id not in amounts.keys():
            amounts.update({sender_id: default_taco_amount})
        if receiver_id not in amounts.keys():
            amounts.update({receiver_id: default_taco_amount})

    if tacos_sent > amounts.get(sender_id):
        if chat.less is True:
            text = balance_low_phrase.split('\n')[0]
        else:
            text = balance_low_phrase
        if chat.autohide:
            msg = bot.send_message(chat_id=cid,
                                   text=text,
                                   reply_to_message_id=get_mid(message),
                                   parse_mode='html')

            time = datetime.datetime.now() + datetime.timedelta(
                minutes=chat.autohide_delay)

            sched.add_job(delete_message,
                          'date',
                          run_date=time,
                          args=[bot, msg])

        else:
            msg = bot.send_message(chat_id=cid,
                                   text=text,
                                   reply_to_message_id=get_mid(message),
                                   reply_markup=ok_keyboard,
                                   parse_mode='html')

        chat.mids = [msg.message_id]
        chat.save()
        return

    amounts.update({sender_id: amounts.get(sender_id) - tacos_sent})
    amounts.update({receiver_id: amounts.get(receiver_id) + tacos_sent})

    if chat.less is True:
        comment = ''
    else:
        if tacos_sent < 3:
            comment = taco_transfer_comment_low
        elif tacos_sent > 9:
            comment = taco_transfer_comment_high
        else:
            comment = taco_transfer_comment_medium.format(receiver_name)

    if "@" in sender_name:
        sender_link = "https://t.me/{}".format(sender_name[1:])
    else:
        sender_link = "tg://user?id={}".format(sender_id)

    if "@" in receiver_name:
        receiver_link = "https://t.me/{}".format(receiver_name[1:])
    else:
        receiver_link = "tg://user?id={}".format(receiver_id)

    if tacos_sent == 1:
        phrase = taco_transfer_phrase.replace('tacos', 'taco')
    else:
        phrase = taco_transfer_phrase

    if len(user_comment) > 0:
        phrase += '<b>And said:</b>\n>>><code>{}</code>'.format(user_comment)

    if chat.autohide:
        msg = bot.send_message(chat_id=cid,
                               text=phrase.format(sender_link, sender_name,
                                                  tacos_sent, receiver_link,
                                                  receiver_name, comment),
                               parse_mode='html',
                               disable_web_page_preview=True)

        time = datetime.datetime.now() + datetime.timedelta(
            minutes=chat.autohide_delay)

        sched.add_job(delete_message, 'date', run_date=time, args=[bot, msg])

    else:

        msg = bot.send_message(chat_id=cid,
                               text=phrase.format(sender_link, sender_name,
                                                  tacos_sent, receiver_link,
                                                  receiver_name, comment),
                               reply_markup=ok_keyboard,
                               parse_mode='html',
                               disable_web_page_preview=True)

    chat.mids = [msg.message_id]
    chat.save()

    tacos.taco_balance = amounts
    tacos.save()
Ejemplo n.º 8
0
def give_tacos(bot, message, sender, receiver):
    cid = get_cid(message)
    tacos = Tacos.get(Tacos.chat == cid)

    chat = Chats.get(Chats.cid == message.chat.id)
    clean_chat(chat.mids, chat.cid, message, bot)

    ok_button = InlineKeyboardButton('OK', callback_data='delete:{}'.format(message.from_user.id))
    ok_keyboard = InlineKeyboardMarkup([[ok_button]])

    if receiver.username is None:
        first_name = receiver.first_name
        last_name = receiver.last_name
        if last_name is None:
            receiver_name = first_name
        else:
            receiver_name = first_name + " " + last_name
    else:
        receiver_name = "@" + receiver.username

    if receiver.is_bot:  # no tacos for bots
        if chat.less is True:
            text = no_bots_allowed_phrase.split('\n')[0]
        else:
            text = no_bots_allowed_phrase
        mid = bot.send_message(chat_id=cid,
                         text=text,
                         reply_to_message_id=get_mid(message),
                               reply_markup=ok_keyboard,
                         parse_mode='html').message_id

        chat.mids = json.dumps([mid])
        chat.save()
        return

    sender_id = str(sender.id)
    receiver_id = str(receiver.id)

    if sender_id == receiver_id:  # self-tacoing is forbidden
        if chat.less is True:
            text = self_tacoing_phrase.split('\n')[0]
        else:
            text = self_tacoing_phrase
        mid = bot.send_message(chat_id=cid,
                         text=text,
                         reply_to_message_id=get_mid(message),
                         parse_mode='html').message_id

        chat.mids = json.dumps([mid])
        chat.save()
        return

    tacos_sent = len(
        re.findall(taco_emoji, message.text)
    )

    if tacos.taco_balance is None:  # initialising/restoring user-balances
        amounts = dict()
        amounts.update({sender_id: default_taco_amount})
        amounts.update({receiver_id: default_taco_amount})
    else:
        amounts = json.loads(tacos.taco_balance)
        if sender_id not in amounts.keys():
            amounts.update({sender_id: default_taco_amount})
        if receiver_id not in amounts.keys():
            amounts.update({receiver_id: default_taco_amount})

    if tacos_sent > amounts.get(sender_id):  # can't send more than you have
        if chat.less is True:
            text = balance_low_phrase.split('\n')[0]
        else:
            text = balance_low_phrase
        mid = bot.send_message(chat_id=cid,
                         text=text,
                         reply_to_message_id=get_mid(message),
                         parse_mode='html').message_id

        chat.mids = json.dumps([mid])
        chat.save()
        return

    amounts.update(
        {sender_id: amounts.get(sender_id) - tacos_sent}
    )
    amounts.update({receiver_id: amounts.get(receiver_id) + tacos_sent})
    if chat.less is True:
        comment = ''
    else:
        if tacos_sent < 3:
            comment = taco_transfer_comment_low
        elif tacos_sent > 9:
            comment = taco_transfer_comment_high
        else:
            comment = taco_transfer_comment_medium.format(receiver_name)

    mid = bot.send_message(chat_id=cid,
                     text=taco_transfer_phrase.format(tacos_sent, receiver_name, comment),
                           reply_markup=ok_keyboard,
                     reply_to_message_id=get_mid(message),
                     parse_mode='html').message_id

    chat.mids = json.dumps([mid])
    chat.save()

    tacos.taco_balance = json.dumps(amounts)  # saving data
    tacos.save()
Ejemplo n.º 9
0
def taco_top_callback(bot, message):
    """ shows top-5(or less) taco-users in chat """

    cid = get_cid(message)
    mid = get_mid(message)

    store_name(message.from_user)

    chat = Chats.get(Chats.cid == message.chat.id)
    clean_chat(chat.mids, chat.cid, bot, message)

    ok_button = InlineKeyboardButton('OK', callback_data='delete:{}'.format(message.from_user.id))
    ok_keyboard = InlineKeyboardMarkup([[ok_button]])

    tacos = Tacos.get(Tacos.chat == cid)

    balances = tacos.taco_balance

    if len(balances) == 0:

        if chat.autohide:
            msg = bot.send_message(text=empty_top_phrase,
                                   chat_id=cid,
                                   parse_mode='html')

            time = datetime.datetime.now() + datetime.timedelta(minutes=chat.autohide_delay)

            sched.add_job(delete_message, 'date', run_date=time, args=[bot, msg])

        else:
            bot.send_message(text=empty_top_phrase,
                             chat_id=cid,
                             reply_markup=ok_keyboard,
                             parse_mode='html')
        return

    top = list()

    while len(balances) > 0 and len(top) < 5:
        top_uid = max(balances, key=balances.get)
        username = resolve_name(top_uid)
        top.append([username, balances.get(top_uid)])
        del balances[top_uid]

    formatted_top = ''
    for user in top:
        if "@" in user[0]:
            user_link = "https://t.me/{}".format(user[0][1:])
        else:
            user_link = "tg://user?id={}".format(user[0])

        formatted_top += '{}. <a href="{}">{}</a> - <code>{}</code> tacos!\n'.format(top.index(user) + 1,
                                                                                     user_link,
                                                                                     user[0][1:],
                                                                                     user[1])

    if chat.autohide:
        msg = bot.send_message(text=taco_top_phrase.format(len(top),
                                                           formatted_top),
                               chat_id=cid,
                               parse_mode='html',
                               disable_web_page_preview=True)

        time = datetime.datetime.now() + datetime.timedelta(minutes=chat.autohide_delay)

        sched.add_job(delete_message, 'date', run_date=time, args=[bot, msg])

    else:
        bot.send_message(text=taco_top_phrase.format(len(top),
                                                     formatted_top),
                         chat_id=cid,
                         reply_markup=ok_keyboard,
                         parse_mode='html',
                         disable_web_page_preview=True)

    chat.mids.append(mid)
    chat.save()
Ejemplo n.º 10
0
def chat_reply_callback(update, context):  # callback for taco-transfer
    cid = get_cid(update)
    store_name(update)

    chat = Chats.get(Chats.cid == cid)
    tacos = Tacos.select().where(Tacos.chat == chat.id)
    if not tacos.exists():
        context.bot.send_message(cid,
                                 no_init_phrase,
                                 parse_mode=ParseMode.HTML)
        return

    tacos = Tacos.get(Tacos.chat == chat.id)

    sender = update.effective_message.from_user  # finding sender/receiver
    receiver = update.effective_message.reply_to_message.from_user

    if receiver.username is None:
        first_name = receiver.first_name
        last_name = receiver.last_name
        if last_name is None:
            receiver_name = first_name
        else:
            receiver_name = first_name + ' ' + last_name
    else:
        receiver_name = '@' + receiver.username

    if receiver.is_bot:  # no tacos for bots
        update.message.reply_text(no_bots_allowed_phrase,
                                  parse_mode=ParseMode.HTML)
        return

    sender_id = str(sender.id)
    receiver_id = str(receiver.id)

    if sender_id == receiver_id:  # self-tacoing is forbidden
        update.message.reply_text(self_tacoing_phrase,
                                  parse_mode=ParseMode.HTML)
        return

    tacos_sent = len(
        re.findall('{}'.format(taco_emoji),
                   update.effective_message.text))  # counting tacos

    if tacos.taco_balance is None:  # initialising/restoring user-balances
        amounts = dict()
        amounts.update({sender_id: default_amount})
        amounts.update({receiver_id: default_amount})
    else:
        amounts = json.loads(tacos.taco_balance)
        if sender_id not in amounts.keys():
            amounts.update({sender_id: default_amount})
        if receiver_id not in amounts.keys():
            amounts.update({receiver_id: default_amount})

    if tacos_sent > amounts.get(sender_id):  # can't send more than you have
        update.message.reply_text(balance_low_phrase,
                                  parse_mode=ParseMode.HTML)
        return

    amounts.update({sender_id: amounts.get(sender_id) - tacos_sent
                    })  # actual taco-transfer
    amounts.update({receiver_id: amounts.get(receiver_id) + tacos_sent})

    if tacos_sent < 3:
        comment = taco_transfer_comment_low
    elif tacos_sent > 9:
        comment = taco_transfer_comment_high
    else:
        comment = taco_transfer_comment_medium.format(receiver_name)

    update.message.reply_text(taco_transfer_phrase.format(
        tacos_sent, receiver_name, comment),
                              parse_mode=ParseMode.HTML)

    tacos.taco_balance = json.dumps(amounts)  # saving data
    tacos.save()