Beispiel #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)
Beispiel #2
0
def init_taco_callback(update, context):  # creates Taco-table after permission
    cid = get_cid(update)

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

    context.bot.send_message(cid,
                             chat_enabled_phrase,
                             parse_mode=ParseMode.HTML)
Beispiel #3
0
def new_chat_callback(update,
                      context):  # triggers when bot gets added to new chat
    cid = get_cid(update)
    store_name(update)

    invited_by = update.effective_message.from_user

    name = store_name(update)

    Chats.create(cid=cid, invited_by=invited_by.id)

    context.bot.send_message(cid,
                             new_group_phrase.format(name),
                             parse_mode=ParseMode.HTML)
Beispiel #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
Beispiel #5
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)
Beispiel #6
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()