def less_callback(bot, message): with db: chat = Chats.get(Chats.cid == message.chat.id) clean_chat(chat.mids, chat.cid, bot, message) user = bot.get_chat_member(chat_id=message.chat.id, user_id=message.from_user.id) if message.from_user.id == chat.invited_by or\ user.status == 'administrator' or\ user.status == 'creator': if chat.less is False: text = silenced_mode_on_phrase chat.less = True else: chat.less = False text = silenced_mode_off_phrase mid = bot.send_message(chat_id=chat.cid, text=text, parse_mode='html').message_id chat.mids = json.dumps([mid]) with db: chat.save() else: text = admins_only_phrase mid = bot.send_message(chat_id=chat.cid, text=text, parse_mode='html').message_id chat.mids = json.dumps([mid]) with db: chat.save()
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)
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()
def taco_mention_callback(bot, message): """ callback for taco-transfer by mention """ cid = get_cid(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]]) mentioned_users = list() for entity in message.entities: if entity.type == 'mention': user = message.text[entity.offset: entity.offset + entity.length].lower() mentioned_users.append(user) mentioned_users = list(set(mentioned_users)) # removing duplicates if len(mentioned_users) > 1: if chat.less is True: text = only_one_receiver_phrase.split('\n')[0] else: text = only_one_receiver_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 = message.from_user receiver_username: str = ensure_no_at_sign(mentioned_users[0]) try: receiver = bot.get_chat_member(chat_id=cid, user_id=receiver_username).user except Exception: """ here should be except UserNotParticipant, but it still raises this exception """ if chat.less is True: text = user_not_present_phrase.split('\n')[0] else: text = user_not_present_phrase mid = bot.send_message(chat_id=cid, text=text.format(ensure_username(receiver_username)), reply_to_message_id=get_mid(message), reply_markup=ok_keyboard, parse_mode='html').message_id chat.mids = json.dumps([mid]) chat.save() return give_tacos(bot, message, sender, receiver)
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)
def chat_reply_callback(bot, message): """ callback for taco-transfer """ store_name(sender := message.from_user) store_name(receiver := message.reply_to_message.from_user) chat = Chats.get(Chats.cid == message.chat.id) clean_chat(chat.mids, chat.cid, bot, None) give_tacos(bot, message, sender, receiver)
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()
def autohide_delay_callback(bot, message): with db: chat = Chats.get(Chats.cid == message.chat.id) clean_chat(chat.mids, chat.cid, bot, message) try: user = bot.get_chat_member(chat_id=message.chat.id, user_id=message.from_user.id) except Exception as e: print(e) bot.send_message( chat_id=chat.cid, text='<b>An error occurred, please contact @Lor3m.</b>', parse_mode='html') return if message.from_user.id == chat.invited_by or\ user.status == 'administrator' or\ user.status == 'creator': if (args := len(message.command)) == 1: delay = 15 elif args > 2: bot.send_message(chat_id=chat.cid, text=autohide_delay_wrong_value_phrase, parse_mode='html') return else: try: delay = int(message.command[1]) except ValueError: bot.send_message(chat_id=chat.cid, text=autohide_delay_wrong_value_phrase, parse_mode='html') return if delay < 1 or delay > 120: bot.send_message(chat_id=chat.cid, text=autohide_delay_wrong_value_phrase, parse_mode='html') return chat.autohide_delay = delay mid = bot.send_message(chat_id=chat.cid, text=autohide_delay_set_phrase.format(delay), parse_mode='html').message_id chat.mids = json.dumps([mid]) with db: chat.save()
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()
def less_callback(bot, message): chat = Chats.get(Chats.cid == message.chat.id) clean_chat(chat.mids, chat.cid, message, bot) if message.from_user.id == chat.invited_by: if chat.less is False: text = '<b>Silenced mode has been turned ON.</b>' chat.less = True else: chat.less = False text = '<b>Silenced mode has been turned OFF.</b>' mid = bot.send_message(chat_id=chat.cid, text=text, parse_mode='html').message_id chat.mids = json.dumps([mid]) chat.save() else: text = '<b>Sorry, but only user that invited me can use this command :(</b>' mid = bot.send_message(chat_id=chat.cid, text=text, parse_mode='html').message_id chat.mids = json.dumps([mid]) chat.save() pass
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)
def filter(self, message): chat = Chats.get(Chats.cid == message.chat.id) tacos = Tacos.select(Tacos.chat == chat.id) return tacos.exists()
def filter(self, message): if message.from_user.id == Chats.get( Chats.cid == message.chat_id).invited_by: return True return False
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()
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()
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()
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()