Ejemplo n.º 1
0
def trade_compare(bot: Bot, update: Update, chat_data: dict):
    session = Session()
    old_stock = session.query(Stock).filter_by(
        user_id=update.message.from_user.id,
        stock_type=StockType.TradeBot.value).order_by(
            Stock.date.desc()).first()
    new_stock = Stock()
    new_stock.stock = update.message.text
    new_stock.stock_type = StockType.TradeBot.value
    new_stock.user_id = update.message.from_user.id
    new_stock.date = datetime.now()
    session.add(new_stock)
    session.commit()
    if old_stock is not None:
        items_old = {}
        items_new = {}
        strings = old_stock.stock.splitlines()
        for string in strings:
            if string.startswith('/add_'):
                item = string.split('   ')[1]
                item = item.split(' x ')
                items_old[item[0]] = int(item[1])
        strings = new_stock.stock.splitlines()
        for string in strings:
            if string.startswith('/add_'):
                item = string.split('   ')[1]
                item = item.split(' x ')
                items_new[item[0]] = int(item[1])
        resource_diff_add, resource_diff_del = get_diff(items_new, items_old)
        msg = MSG_STOCK_COMPARE_HARVESTED
        if len(resource_diff_add):
            for key, val in resource_diff_add:
                msg += MSG_STOCK_COMPARE_FORMAT.format(key, val)
        else:
            msg += MSG_EMPTY
        msg += MSG_STOCK_COMPARE_LOST
        if len(resource_diff_del):
            for key, val in resource_diff_del:
                msg += MSG_STOCK_COMPARE_FORMAT.format(key, val)
        else:
            msg += MSG_EMPTY
        send_async(bot,
                   chat_id=update.message.chat.id,
                   text=msg,
                   parse_mode=ParseMode.HTML)
    else:
        send_async(bot,
                   chat_id=update.message.chat.id,
                   text=MSG_STOCK_COMPARE_WAIT)
Ejemplo n.º 2
0
def battle_reports_show(bot: Bot, update: Update, session):
    admin = session.query(Admin, Squad).filter(
        Admin.user_id == update.message.from_user.id,
        Squad.chat_id == Admin.admin_group).all()
    group_admin = []
    for adm, squad in admin:
        if squad is not None:
            group_admin.append([adm, squad])
    for adm, squad in group_admin:
        now = datetime.now()
        time_from = datetime(now.year, now.month, now.day,
                             int(now.hour / 4) * 4, 0, 0)
        reports = session.query(User, Report) \
            .join(SquadMember) \
            .outerjoin(Report, and_(User.id == Report.user_id, Report.date > time_from)) \
            .filter(SquadMember.squad_id == adm.admin_group).order_by(Report.date.desc()).all()
        text = ''
        full_def = 0
        full_atk = 0
        full_exp = 0
        full_gold = 0
        full_stock = 0
        total_reports = 0
        total_members = 0
        for user, report in reports:
            total_members += 1
            if report:
                text += MSG_REPORT_SUMMARY_ROW.format(
                    report.name, user.username, report.attack, report.defence,
                    report.earned_exp, report.earned_gold, report.earned_stock)
                full_atk += report.attack
                full_def += report.defence
                full_exp += report.earned_exp
                full_gold += report.earned_gold
                full_stock += report.earned_stock
                total_reports += 1
            else:
                text += MSG_REPORT_SUMMARY_ROW_EMPTY.format(
                    user.character.name, user.username)
        text = MSG_REPORT_SUMMARY_HEADER.format(
            squad.squad_name, time_from.strftime('%d-%m-%Y %H:%M'),
            total_reports, total_members, full_atk, full_def, full_exp,
            full_gold, full_stock) + text
        markup = generate_other_reports(time_from, squad.chat_id)
        send_async(bot,
                   chat_id=update.message.chat.id,
                   text=text,
                   parse_mode=ParseMode.HTML,
                   reply_markup=markup)
Ejemplo n.º 3
0
def del_adm(bot, chat_id, user, session):
    adm = session.query(Admin).filter_by(user_id=user.id,
                                         admin_group=chat_id).first()

    if adm is None:
        send_async(bot,
                   chat_id=chat_id,
                   text=MSG_DEL_GROUP_ADMIN_NOT_EXIST.format(user.username))

    else:
        session.delete(adm)
        session.commit()
        send_async(bot,
                   chat_id=chat_id,
                   text=MSG_DEL_GROUP_ADMIN.format(user.username))
Ejemplo n.º 4
0
def newbie(bot: Bot, update: Update, session):
    if ACADEM_CHAT_ID and CASTLE_CHAT_ID:
        if update.message.chat.id in [CASTLE_CHAT_ID]:
            if update.message.new_chat_member is not None:
                user = session.query(User).filter(
                    User.id == update.message.new_chat_member.id).first()
                if user is None:
                    group = session.query(Group).filter(
                        Group.id == ACADEM_CHAT_ID).first()
                    if group is not None:
                        send_async(bot,
                                   chat_id=group.id,
                                   text=fill_template(
                                       MSG_NEWBIE,
                                       update.message.new_chat_member))
Ejemplo n.º 5
0
def admin_panel(bot: Bot, update: Update, session):
    if update.message.chat.type == 'private':
        admin = session.query(Admin).filter_by(
            user_id=update.message.from_user.id).all()
        full_adm = False
        grp_adm = False
        for adm in admin:
            if adm.admin_type <= AdminType.FULL.value:
                full_adm = True
            else:
                grp_adm = True
        send_async(bot,
                   chat_id=update.message.chat.id,
                   text=MSG_ADMIN_WELCOME,
                   reply_markup=generate_admin_markup(full_adm, grp_adm))
Ejemplo n.º 6
0
def set_welcome(bot: Bot, update: Update):
    if update.message.chat.type in ['group', 'supergroup']:
        group = update_group(update.message.chat)
        session = Session()
        welcome_msg = session.query(WelcomeMsg).filter_by(
            chat_id=group.id).first()
        if welcome_msg is None:
            welcome_msg = WelcomeMsg(chat_id=group.id,
                                     message=update.message.text.split(' ',
                                                                       1)[1])
        else:
            welcome_msg.message = update.message.text.split(' ', 1)[1]
        session.add(welcome_msg)
        session.commit()
        send_async(bot, chat_id=update.message.chat.id, text=MSG_WELCOME_SET)
Ejemplo n.º 7
0
def web_auth(bot: Bot, update: Update, session):
    user = add_user(update.message.from_user, session)
    auth = session.query(Auth).filter_by(user_id=user.id).first()
    if auth is None:
        auth = Auth()
        auth.id = uuid.uuid4().hex
        auth.user_id = user.id
        session.add(auth)
        session.commit()
    link = WEB_LINK.format(auth.id)
    send_async(bot,
               chat_id=update.message.chat.id,
               text=MSG_PERSONAL_SITE_LINK.format(link),
               parse_mode=ParseMode.HTML,
               disable_web_page_preview=True)
Ejemplo n.º 8
0
def admins_for_users(bot: Bot, update: Update, session):
    admins = session.query(Admin).filter(Admin.admin_group == update.message.chat.id).all()
    users = []
    for admin_user in admins:
        users.append(session.query(User).filter_by(id=admin_user.user_id).first())
    msg = MSG_LIST_ADMINS_HEADER
    if users is None:
        msg += MSG_EMPTY
    else:
        for user in users:
            msg += MSG_LIST_ADMINS_USER_FORMAT.format(user.username or '',
                                                      user.first_name or '',
                                                      user.last_name or '')

    send_async(bot, chat_id=update.message.chat.id, text=msg)
Ejemplo n.º 9
0
def user_panel(bot: Bot, update: Update, session):
    if update.message.chat.type == 'private':
        admin = session.query(Admin).filter_by(
            user_id=update.message.from_user.id).all()
        is_admin = False
        for _ in admin:
            is_admin = True
            break
        squad_member = session.query(SquadMember).filter_by(
            user_id=update.message.from_user.id).first()
        send_async(bot,
                   chat_id=update.message.chat.id,
                   text=MSG_START_WELCOME,
                   parse_mode=ParseMode.HTML,
                   reply_markup=generate_user_markup(
                       is_admin, True if squad_member else False))
Ejemplo n.º 10
0
def stock_compare(bot: Bot, update: Update, session, chat_data: dict):
    old_stock = session.query(Stock).filter_by(
        user_id=update.message.from_user.id,
        stock_type=StockType.Stock.value).order_by(Stock.date.desc()).first()
    new_stock = Stock()
    new_stock.stock = update.message.text
    new_stock.stock_type = StockType.Stock.value
    new_stock.user_id = update.message.from_user.id
    new_stock.date = datetime.now()
    session.add(new_stock)
    session.commit()
    if old_stock is not None:
        resources_old = {}
        resources_new = {}
        strings = old_stock.stock.splitlines()
        for string in strings[1:]:
            resource = string.split(' (')
            resource[1] = resource[1][:-1]
            resources_old[resource[0]] = int(resource[1])
        strings = new_stock.stock.splitlines()
        for string in strings[1:]:
            resource = string.split(' (')
            resource[1] = resource[1][:-1]
            resources_new[resource[0]] = int(resource[1])
        resource_diff_add, resource_diff_del = get_diff(
            resources_new, resources_old)
        msg = MSG_STOCK_COMPARE_HARVESTED
        if len(resource_diff_add):
            for key, val in resource_diff_add:
                msg += MSG_STOCK_COMPARE_FORMAT.format(key, val)
        else:
            msg += MSG_EMPTY
        msg += MSG_STOCK_COMPARE_LOST
        if len(resource_diff_del):
            for key, val in resource_diff_del:
                msg += MSG_STOCK_COMPARE_FORMAT.format(key, val)
        else:
            msg += MSG_EMPTY
        send_async(bot,
                   chat_id=update.message.chat.id,
                   text=msg,
                   parse_mode=ParseMode.HTML)
    else:
        send_async(bot,
                   chat_id=update.message.chat.id,
                   text=MSG_STOCK_COMPARE_WAIT,
                   parse_mode=ParseMode.HTML)
Ejemplo n.º 11
0
def ready_to_battle_result(bot: Bot, job_queue):
    session = Session()
    try:
        group = session.query(Squad).all()
        full_attack = 0
        full_defence = 0
        full_text = ''
        full_count = 0

        for item in group:
            ready_order = session.query(Order).filter_by(
                chat_id=item.chat_id, text=MSG_MAIN_READY_TO_BATTLE).order_by(
                    Order.date.desc()).first()

            if ready_order is not None:
                attack = 0
                defence = 0
                for clear in ready_order.cleared:
                    if clear.user.character:
                        attack += clear.user.character.attack
                        defence += clear.user.character.defence

                text = MSG_SQUAD_READY.format(len(ready_order.cleared),
                                              item.squad_name, attack, defence)

                send_async(bot,
                           chat_id=item.chat_id,
                           text=text,
                           parse_mode=ParseMode.HTML)

                full_attack += attack
                full_defence += defence
                full_count += len(ready_order.cleared)
                full_text += MSG_FULL_TEXT_LINE.format(
                    item.squad_name, len(ready_order.cleared), attack, defence)

        full_text += MSG_FULL_TEXT_TOTAL.format(full_count, full_attack,
                                                full_defence)

        send_async(bot,
                   chat_id=GOVERNMENT_CHAT,
                   text=full_text,
                   parse_mode=ParseMode.HTML)

    except SQLAlchemyError as err:
        bot.logger.error(str(err))
        Session.rollback()
Ejemplo n.º 12
0
def list_admins(bot: Bot, update: Update):
    session = Session()
    try:
        admins = session.query(Admin).filter(
            Admin.admin_group == update.message.chat.id).all()
        users = []
        for admin_user in admins:
            users.append(
                session.query(User).filter_by(id=admin_user.user_id).first())
        msg = MSG_LIST_ADMINS_HEADER
        for user in users:
            msg += MSG_LIST_ADMINS_FORMAT.format(user.id, user.username,
                                                 user.first_name,
                                                 user.last_name)
        send_async(bot, chat_id=update.message.chat.id, text=msg)
    except:
        session.rollback()
Ejemplo n.º 13
0
def welcome(bot: Bot, update: Update):
    newbie(bot, update)
    global last_welcome
    if update.message.chat.type in ['group', 'supergroup']:
        group = update_group(update.message.chat)
        for new_chat_member in update.message.new_chat_members:
            session = Session()
            user = add_user(new_chat_member)
            administrator = session.query(Admin).filter_by(
                user_id=user.id).all()
            allow_anywhere = False
            for adm in administrator:
                if adm.admin_type == AdminType.FULL.value:
                    allow_anywhere = True
                    break
            if len(group.squad) == 1 and group.squad[0].thorns_enabled and user.id != 386494081 and \
                    (user.member or user.member not in group.squad[0].members) and not allow_anywhere:
                send_async(bot,
                           chat_id=update.message.chat.id,
                           text=MSG_THORNS.format(str(user)))
                bot.kickChatMember(update.message.chat.id, new_chat_member.id)
                bot.unbanChatMember(update.message.chat.id, new_chat_member.id)
            else:
                if group.welcome_enabled:
                    welcome_msg = session.query(WelcomeMsg).filter_by(
                        chat_id=group.id).first()
                    if welcome_msg is None:
                        welcome_msg = WelcomeMsg(chat_id=group.id,
                                                 message=MSG_WELCOME_DEFAULT)
                        session.add(welcome_msg)

                    welcomed = session.query(Wellcomed).filter_by(
                        user_id=new_chat_member.id,
                        chat_id=update.message.chat.id).first()
                    if welcomed is None:
                        if time() - last_welcome > 30:
                            send_async(bot,
                                       chat_id=update.message.chat.id,
                                       text=fill_template(
                                           welcome_msg.message, user))
                            last_welcome = time()
                        welcomed = Wellcomed(user_id=new_chat_member.id,
                                             chat_id=update.message.chat.id)
                        session.add(welcomed)
                    session.commit()
Ejemplo n.º 14
0
def remove_from_squad(bot: Bot, update: Update, session):
    admin = session.query(Admin).filter_by(
        user_id=update.message.from_user.id).all()
    group_admin = []
    for adm in admin:
        squad = session.query(Squad).filter_by(chat_id=adm.admin_group).first()
        if squad is not None:
            group_admin.append(adm)
    for adm in group_admin:
        members = session.query(SquadMember).filter_by(
            squad_id=adm.admin_group, approved=True).all()
        markup = generate_fire_up(members)
        squad = session.query(Squad).filter_by(chat_id=adm.admin_group).first()
        send_async(bot,
                   chat_id=update.message.chat.id,
                   text=MSG_SQUAD_CLEAN.format(squad.squad_name),
                   reply_markup=markup,
                   parse_mode=ParseMode.HTML)
Ejemplo n.º 15
0
def send_status(bot: Bot, update: Update, session):
    msg = MSG_GROUP_STATUS_CHOOSE_CHAT
    squads = session.query(Squad).all()
    inline_keys = []
    for squad in squads:
        inline_keys.append(
            InlineKeyboardButton(squad.squad_name,
                                 callback_data=json.dumps({
                                     't':
                                     QueryType.GroupInfo.value,
                                     'id':
                                     squad.chat_id
                                 })))
    inline_markup = InlineKeyboardMarkup([[key] for key in inline_keys])
    send_async(bot,
               chat_id=update.message.chat.id,
               text=msg,
               reply_markup=inline_markup)
Ejemplo n.º 16
0
def fresh_profiles(bot: Bot, job_queue):
    session = Session()
    try:
        actual_profiles = session.query(Character.user_id, func.max(Character.date)). \
            group_by(Character.user_id)
        actual_profiles = actual_profiles.all()
        characters = session.query(Character).filter(
            tuple_(Character.user_id,
                   Character.date).in_([(a[0], a[1])
                                        for a in actual_profiles]),
            datetime.now() - timedelta(days=DAYS_PROFILE_REMIND) >
            Character.date, Character.date >
            datetime.now() - timedelta(days=DAYS_OLD_PROFILE_KICK))
        if CASTLE:
            characters = characters.filter_by(castle=CASTLE)
        characters = characters.all()
        for character in characters:
            send_async(bot,
                       chat_id=character.user_id,
                       text=MSG_UPDATE_PROFILE,
                       parse_mode=ParseMode.HTML)
        characters = session.query(Character).filter(
            tuple_(Character.user_id, Character.date).in_([
                (a[0], a[1]) for a in actual_profiles
            ]), Character.date <
            datetime.now() - timedelta(days=DAYS_OLD_PROFILE_KICK)).all()
        members = session.query(SquadMember, User).filter(SquadMember.user_id
                                                          .in_([character.user_id for character in characters])) \
            .join(User, User.id == SquadMember.user_id).all()
        for member, user in members:
            session.delete(member)
            admins = session.query(Admin).filter_by(
                admin_group=member.squad_id).all()
            for adm in admins:
                send_async(bot,
                           chat_id=adm.user_id,
                           text=MSG_SQUAD_DELETE_OUTDATED_EXT.format(
                               member.user.character.name,
                               member.user.username, member.squad.squad_name),
                           parse_mode=ParseMode.HTML)
            send_async(bot,
                       chat_id=member.squad_id,
                       text=MSG_SQUAD_DELETE_OUTDATED_EXT.format(
                           member.user.character.name, member.user.username,
                           member.squad.squad_name),
                       parse_mode=ParseMode.HTML)
            send_async(bot,
                       chat_id=member.user_id,
                       text=MSG_SQUAD_DELETE_OUTDATED,
                       parse_mode=ParseMode.HTML)
        session.commit()
    except SQLAlchemyError as err:
        bot.logger.error(str(err))
        Session.rollback()
Ejemplo n.º 17
0
def trigger_show(bot: Bot, update: Update, session):
    trigger = session.query(LocalTrigger).filter_by(
        chat_id=update.message.chat.id, trigger=update.message.text).first()
    if trigger is None:
        trigger = session.query(Trigger).filter_by(
            trigger=update.message.text).first()
    if trigger is not None:
        if trigger.message_type == MessageType.AUDIO.value:
            bot.send_audio(update.message.chat.id, trigger.message)
        elif trigger.message_type == MessageType.DOCUMENT.value:
            bot.send_document(update.message.chat.id, trigger.message)
        elif trigger.message_type == MessageType.VOICE.value:
            bot.send_voice(update.message.chat.id, trigger.message)
        elif trigger.message_type == MessageType.STICKER.value:
            bot.send_sticker(update.message.chat.id, trigger.message)
        elif trigger.message_type == MessageType.CONTACT.value:
            msg = trigger.message.replace('\'', '"')
            contact = loads(msg)
            if 'phone_number' not in contact.keys():
                contact['phone_number'] = None
            if 'first_name' not in contact.keys():
                contact['first_name'] = None
            if 'last_name' not in contact.keys():
                contact['last_name'] = None
            bot.send_contact(update.message.chat.id, contact['phone_number'],
                             contact['first_name'], contact['last_name'])
        elif trigger.message_type == MessageType.VIDEO.value:
            bot.send_video(update.message.chat.id, trigger.message)
        elif trigger.message_type == MessageType.VIDEO_NOTE.value:
            bot.send_video_note(update.message.chat.id, trigger.message)
        elif trigger.message_type == MessageType.LOCATION.value:
            msg = trigger.message.replace('\'', '"')
            location = loads(msg)
            bot.send_location(update.message.chat.id, location['latitude'],
                              location['longitude'])
        elif trigger.message_type == MessageType.PHOTO.value:
            bot.send_photo(update.message.chat.id, trigger.message)
        elif trigger.message_type == MessageType.ANIMATION.value:
            bot.send_animation(update.message.chat.id, trigger.message)
        else:
            send_async(bot,
                       chat_id=update.message.chat.id,
                       text=trigger.message,
                       disable_web_page_preview=True)
Ejemplo n.º 18
0
def leave_squad_request(bot: Bot, update: Update, session):
    member = session.query(SquadMember).filter_by(
        user_id=update.message.from_user.id).first()
    user = session.query(User).filter_by(
        id=update.message.from_user.id).first()
    if member:
        squad = member.squad
        markup = generate_yes_no(user_id=user.id)
        send_async(bot,
                   chat_id=member.user_id,
                   text=MSG_SQUAD_LEAVE_ASK.format(user.character.name,
                                                   squad.squad_name),
                   parse_mode=ParseMode.HTML,
                   reply_markup=markup)
    else:
        send_async(bot,
                   chat_id=user.id,
                   text=MSG_SQUAD_NONE,
                   parse_mode=ParseMode.HTML)
Ejemplo n.º 19
0
def find_by_username(bot: Bot, update: Update, session):
    if update.message.chat.type == 'private':
        msg = update.message.text.split(' ', 1)[1]
        msg = msg.replace('@', '')
        if msg != '':
            user = session.query(User).filter_by(username=msg).first()
            if user is not None and user.character:
                char = user.character
                text = fill_char_template(MSG_PROFILE_SHOW_FORMAT, user, char)
                btns = generate_profile_buttons(user)
                send_async(bot,
                           chat_id=update.message.chat.id,
                           text=text,
                           reply_markup=btns)
            else:
                send_async(bot,
                           chat_id=update.message.chat.id,
                           text=MSG_PROFILE_NOT_FOUND,
                           parse_mode=ParseMode.HTML)
Ejemplo n.º 20
0
def order(bot: Bot, update: Update, chat_data):
    session = Session()
    admin_user = session.query(Admin).filter(
        Admin.user_id == update.message.from_user.id).all()
    markup = generate_order_groups_markup(
        bot, admin_user, chat_data['pin'] if 'pin' in chat_data else True)
    msg = update.message
    if msg.audio:
        chat_data['order'] = msg.audio.file_id
        chat_data['order_type'] = MessageType.AUDIO.value
    elif msg.document:
        chat_data['order'] = msg.document.file_id
        chat_data['order_type'] = MessageType.DOCUMENT.value
    elif msg.voice:
        chat_data['order'] = msg.voice.file_id
        chat_data['order_type'] = MessageType.VOICE.value
    elif msg.sticker:
        chat_data['order'] = msg.sticker.file_id
        chat_data['order_type'] = MessageType.STICKER.value
    elif msg.contact:
        chat_data['order'] = str(msg.contact)
        chat_data['order_type'] = MessageType.CONTACT.value
    elif msg.video:
        chat_data['order'] = msg.video.file_id
        chat_data['order_type'] = MessageType.VIDEO.value
    elif msg.video_note:
        chat_data['order'] = msg.video_note.file_id
        chat_data['order_type'] = MessageType.VIDEO_NOTE.value
    elif msg.location:
        chat_data['order'] = str(msg.location)
        chat_data['order_type'] = MessageType.LOCATION.value
    elif msg.photo:
        chat_data['order'] = msg.photo[-1].file_id
        chat_data['order_type'] = MessageType.PHOTO.value
    else:
        chat_data['order'] = msg.text
        chat_data['order_type'] = MessageType.TEXT.value
    send_async(bot,
               chat_id=update.message.chat.id,
               text=MSG_ORDER_SEND_HEADER,
               reply_markup=markup)
Ejemplo n.º 21
0
def add_squad(bot: Bot, update: Update, session):
    if update.message.chat.type == 'supergroup':
        squad = session.query(Squad).filter_by(
            chat_id=update.message.chat.id).first()
        if squad is None:
            squad = Squad()
            squad.chat_id = update.message.chat.id
            squad.thorns_enabled = False
            msg = update.message.text.split(' ', 1)
            if len(msg) == 2:
                squad.squad_name = msg[1]
            else:
                group = session.query(Group).filter_by(
                    id=update.message.chat.id).first()
                squad.squad_name = group.title
            session.add(squad)
            session.commit()
            send_async(bot,
                       chat_id=update.message.chat.id,
                       text=MSG_SQUAD_NEW.format(squad.squad_name),
                       parse_mode=ParseMode.HTML)
Ejemplo n.º 22
0
def squad_list(bot: Bot, update: Update, session):
    admin = session.query(Admin).filter_by(
        user_id=update.message.from_user.id).all()
    global_adm = False
    for adm in admin:
        if adm.admin_type <= AdminType.FULL.value:
            global_adm = True
            break
    if global_adm:
        squads = session.query(Squad).all()
    else:
        group_ids = []
        for adm in admin:
            group_ids.append(adm.admin_group)
        squads = session.query(Squad).filter(
            Squad.chat_id.in_(group_ids)).all()
    markup = generate_squad_list(squads, session)
    send_async(bot,
               chat_id=update.message.chat.id,
               text=MSG_SQUAD_LIST,
               reply_markup=markup)
Ejemplo n.º 23
0
def set_admin(bot: Bot, update: Update, session):
    msg = update.message.text.split(' ', 1)[1]
    msg = msg.replace('@', '')
    if msg != '':
        user = session.query(User).filter_by(username=msg).first()
        if user is None:
            send_async(bot,
                       chat_id=update.message.chat.id,
                       text=MSG_USER_UNKNOWN)

        else:
            adm = session.query(Admin).filter_by(
                user_id=user.id, admin_group=update.message.chat.id).first()

            if adm is None:
                new_group_admin = Admin(user_id=user.id,
                                        admin_type=AdminType.GROUP.value,
                                        admin_group=update.message.chat.id)

                session.add(new_group_admin)
                session.commit()
                send_async(bot,
                           chat_id=update.message.chat.id,
                           text=MSG_NEW_GROUP_ADMIN.format(user.username))

            else:
                send_async(bot,
                           chat_id=update.message.chat.id,
                           text=MSG_NEW_GROUP_ADMIN_EXISTS.format(
                               user.username))
Ejemplo n.º 24
0
def set_global_admin(bot: Bot, update: Update):
    session = Session()
    try:
        msg = update.message.text.split(' ', 1)[1]
        msg = msg.replace('@', '')
        if msg != '':
            user = session.query(User).filter_by(username=msg).first()
            if user is None:
                send_async(bot,
                           chat_id=update.message.chat.id,
                           text=MSG_USER_UNKNOWN)
            else:
                adm = session.query(Admin).filter_by(
                    user_id=user.id, admin_type=AdminType.FULL.value).first()
                if adm is None:
                    new_group_admin = Admin(user_id=user.id,
                                            admin_type=AdminType.FULL.value,
                                            admin_group=0)
                    session.add(new_group_admin)
                    session.commit()
                    send_async(bot,
                               chat_id=update.message.chat.id,
                               text=MSG_NEW_GLOBAL_ADMIN.format(user.username))
                else:
                    send_async(bot,
                               chat_id=update.message.chat.id,
                               text=MSG_NEW_GLOBAL_ADMIN_EXISTS.format(
                                   user.username))
    except:
        session.rollback()
Ejemplo n.º 25
0
def repair_report_received(bot: Bot, update: Update, session):
    if datetime.now() - update.message.forward_date > timedelta(minutes=10):
        send_async(bot,
                   chat_id=update.message.from_user.id,
                   text=MSG_BUILD_REPORT_TOO_OLD)
        return
    report = re.search(REPAIR_REPORT, update.message.text)
    user = session.query(User).filter_by(
        id=update.message.from_user.id).first()
    if report and user.character:
        old_report = session.query(BuildReport) \
            .filter(BuildReport.user_id == user.id,
                    BuildReport.date > update.message.forward_date - timedelta(minutes=5),
                    BuildReport.date < update.message.forward_date + timedelta(minutes=5)).first()
        if old_report is None:
            parse_repair_reports(update.message.text,
                                 update.message.from_user.id,
                                 update.message.forward_date, session)
            user_builds = session.query(BuildReport).filter_by(
                user_id=user.id).count()
            send_async(bot,
                       chat_id=update.message.from_user.id,
                       text=MSG_BUILD_REPORT_OK.format(user_builds))
        else:
            send_async(bot,
                       chat_id=update.message.from_user.id,
                       text=MSG_BUILD_REPORT_EXISTS)
Ejemplo n.º 26
0
def leave_squad(bot: Bot, user: User, member: SquadMember, message, session):
    if member:
        squad = session.query(Squad).filter(
            Squad.chat_id == member.squad_id).first()
        member_user = session.query(User).filter(
            User.id == member.user_id).first()
        session.delete(member)
        session.commit()
        if member.approved:
            admins = session.query(Admin).filter_by(
                admin_group=squad.chat_id).all()
            for adm in admins:
                if adm.user_id != user.id:
                    send_async(bot,
                               chat_id=adm.user_id,
                               text=MSG_SQUAD_LEAVED.format(
                                   member_user.character.name,
                                   squad.squad_name),
                               parse_mode=ParseMode.HTML)
            send_async(bot,
                       chat_id=member.squad_id,
                       text=MSG_SQUAD_LEAVED.format(member_user.character.name,
                                                    squad.squad_name),
                       parse_mode=ParseMode.HTML)
        try:
            bot.kick_chat_member(squad.chat_id, member.user_id)
        except TelegramError as err:
            bot.logger.error(err.message)

        if member.user_id == user.id:
            bot.editMessageText(MSG_SQUAD_LEAVED.format(
                member_user.character.name, squad.squad_name),
                                message.chat.id,
                                message.message_id,
                                parse_mode=ParseMode.HTML)
        else:
            send_async(bot,
                       chat_id=member.user_id,
                       text=MSG_SQUAD_LEAVED.format(member_user.character.name,
                                                    squad.squad_name),
                       parse_mode=ParseMode.HTML)
            members = session.query(SquadMember).filter_by(
                squad_id=member.squad_id, approved=True).all()
            bot.editMessageText(message.text,
                                message.chat.id,
                                message.message_id,
                                reply_markup=generate_fire_up(members))
    else:
        send_async(bot, chat_id=user.id, text=MSG_SQUAD_ALREADY_DELETED)
Ejemplo n.º 27
0
def squad_list(bot: Bot, update: Update):
    session = scoped_session(Session)()
    admin = session.query(Admin).filter_by(
        user_id=update.message.from_user.id).all()
    global_adm = False
    for adm in admin:
        if adm.admin_type <= AdminType.FULL.value:
            global_adm = True
            break
    squads = []
    if global_adm:
        squads = session.query(Squad).all()
    else:
        for adm in admin:
            group = session.query(Group).filter_by(id=adm.admin_group).first()
            if len(group.squad) and group.squad[0]:
                squads.append(group.squad[0])
    markup = generate_squad_list(squads)
    send_async(bot,
               chat_id=update.message.chat.id,
               text=MSG_SQUAD_LIST,
               reply_markup=markup)
Ejemplo n.º 28
0
def del_admin(bot: Bot, update: Update, session):
    msg = update.message.text.split(' ', 1)[1]
    if msg.find('@') != -1:
        msg = msg.replace('@', '')
        if msg != '':
            user = session.query(User).filter_by(username=msg).first()
            if user is None:
                send_async(bot,
                           chat_id=update.message.chat.id,
                           text=MSG_USER_UNKNOWN)

            else:
                del_adm(bot, update.message.chat.id, user, session)
    else:
        user = session.query(User).filter_by(id=msg).first()
        if user is None:
            send_async(bot,
                       chat_id=update.message.chat.id,
                       text=MSG_USER_UNKNOWN)

        else:
            del_adm(bot, update.message.chat.id, user, session)
Ejemplo n.º 29
0
def ban(bot: Bot, update: Update, session):
    username, reason = update.message.text.split(' ', 2)[1:]
    username = username.replace('@', '')
    user = session.query(User).filter_by(username=username).first()
    if user:
        banned = session.query(Ban).filter_by(user_id=user.id).first()
        if banned:
            send_async(bot,
                       chat_id=update.message.chat.id,
                       text=MSG_ALREADY_BANNED.format(banned.to_date,
                                                      banned.reason))
        else:
            banned = Ban()
            banned.user_id = user.id
            banned.from_date = datetime.now()
            banned.to_date = datetime.max
            banned.reason = reason or MSG_NO_REASON
            member = session.query(SquadMember).filter_by(
                user_id=user.id).first()
            if member:
                session.delete(member)
            admins = session.query(Admin).filter_by(user_id=user.id).all()
            for admin in admins:
                session.delete(admin)
            session.add(banned)
            session.commit()
            squads = session.query(Squad).all()
            for squad in squads:
                send_async(bot,
                           chat_id=squad.chat_id,
                           text=MSG_USER_BANNED.format('@' + username))
            send_async(bot,
                       chat_id=user.id,
                       text=MSG_YOU_BANNED.format(banned.reason))
            send_async(bot,
                       chat_id=update.message.chat.id,
                       text=MSG_BAN_COMPLETE)
    else:
        send_async(bot, chat_id=update.message.chat.id, text=MSG_USER_UNKNOWN)
Ejemplo n.º 30
0
def char_show(bot: Bot, update: Update, session):
    if update.message.chat.type == 'private':
        user = session.query(User).filter_by(
            id=update.message.from_user.id).first()
        if user is not None and user.character is not None:
            char = user.character
            if CASTLE:
                if char.castle == CASTLE:
                    text = fill_char_template(MSG_PROFILE_SHOW_FORMAT, user,
                                              char)
                    btns = generate_profile_buttons(user)
                    send_async(bot,
                               chat_id=update.message.chat.id,
                               text=text,
                               reply_markup=btns)
            else:
                text = fill_char_template(MSG_PROFILE_SHOW_FORMAT, user, char)
                btns = generate_profile_buttons(user)
                send_async(bot,
                           chat_id=update.message.chat.id,
                           text=text,
                           reply_markup=btns)