Ejemplo n.º 1
0
async def on_action(event: ChatAction.Event):
    chat_id = event.chat_id
    print(event)
    user = await event.get_user()
    if event.action_message is None:
        pass
    elif event.created:
        # New chat! Let's add all user but the bot
        # Let's create a new group and add all members of the channel who aren't bots
        group = ExpenseGroup(id=chat_id, name=event.chat.title)
        users = await event.get_users()
        for chat_member in users:
            if not chat_member.bot:
                telegram_user = TelegramUser(id=chat_member.id,
                                             username=chat_member.username,
                                             name=chat_member.first_name)
                group.add_chat_member(telegram_user)
        create_group(expense_groups, group)
    elif not user.is_self and not user.bot:
        group = get_group(expense_groups, chat_id)
        # If the user exited the chat, remove it from the expense group
        if event.user_left or event.user_kicked:
            user = event.user
            group.disable_chat_member(user.id)
            update_group(expense_groups, group)
        # If a new user joined the chat, either alone or by being added:
        if event.user_joined or event.user_added:
            chat_member = event.user
            telegram_user = TelegramUser(id=chat_member.id,
                                         username=chat_member.username,
                                         name=chat_member.first_name)
            group.add_chat_member(telegram_user)
        update_group(expense_groups, group)
    elif user.is_self and event.user_added:
        # the bot was added to the chat
        # Let's create a new group and add all members of the channel who aren't bots
        # Check if group exist?
        group = get_group(expense_groups, chat_id)
        if not group:
            group = ExpenseGroup(id=chat_id, name=event.chat.title)
            async for chat_member in tg_client.iter_participants(entity=chat_id):
                if not chat_member.bot:
                    telegram_user = TelegramUser(id=chat_member.id,
                                                 username=chat_member.username,
                                                 name=chat_member.first_name)
                    group.add_chat_member(telegram_user)
            create_group(expense_groups, group)
    elif event.new_title:
        group = get_group(expense_groups, chat_id)
        if group:
            group.name = event.new_title
            update_group(expense_pattern, group)
def add_chats_users(chats):
    for chat_obj in tqdm(chats):
        account = random.choice(Account.query.filter_by(valid=True).all())
        chat_parser = ChatParserMethods(
            StringSession(account.session),
            api_hash='5c10a75e8f9a21326fa191dc8dd4d916',
            api_id=933676)
        chat_parser.connect()
        try:
            users = chat_parser.parsing_chat(chat_obj=chat_obj)
        except UsernameInvalidError:
            print(f"UsernameInvalidError:")
            continue
        except FloodWaitError:
            print(f"FloodWaitError:")
            chat_parser.valid = False
            db.session.commit()
        except Exception as e:
            print(f"Exception: {e}")
            continue
        for user in tqdm(users):
            telegram_user_obj = TelegramUser.query.get(user.id)
            if not telegram_user_obj:
                telegram_user_obj = TelegramUser(user_id=user.id,
                                                 phone_number=user.phone,
                                                 username=user.username,
                                                 last_name=user.last_name,
                                                 first_name=user.first_name)
            chat_obj.telegram_users.append(telegram_user_obj)
            try:
                db.session.flush()
            except Exception as e:
                print(e)
                db.session.rollback()
        db.session.commit()
Ejemplo n.º 3
0
def getcard(chat_id):
    telegramuser, created = TelegramUser.get_or_create(chat_id=chat_id)
    card = "Моя виртуальная визитка:\n" + str(
        telegramuser.first_name) + "\n" + str(
            telegramuser.post) + "\nTel: " + str(
                telegramuser.phone) + "\nEmail: " + str(telegramuser.email)
    return card
Ejemplo n.º 4
0
def start(bot, update):
    telegramuser, created = TelegramUser.get_or_create(chat_id = update.message.chat_id)
    telegramuser.state = "main"
    telegramuser.save()
    KEYBOARD = [["Создать визитку"],["Посмотреть визитку"]]
    reply_markup = telegram.ReplyKeyboardMarkup(KEYBOARD)
    bot.sendMessage(update.message.chat_id, reply_markup = reply_markup, text='Hi!')
Ejemplo n.º 5
0
def message(bot, update):
    telegramuser, created = TelegramUser.get_or_create(
        chat_id=update.message.chat_id)
    state = telegramuser.state

    if state == "main":
        if update.message.text == "Создать визитку":
            telegramuser.state = "question1"
            telegramuser.save()
            bot.sendMessage(update.message.chat_id,
                            reply_markup=telegram.ReplyKeyboardHide(),
                            text="Как Вас зовут?")
            return

        elif update.message.text == "Посмотреть визитку":
            telegramuser.state = "main"
            telegramuser.save()
            bot.sendMessage(update.message.chat_id,
                            text=getcard(update.message.chat_id),
                            parse_mode='HTML')
            return
        else:
            bot.sendMessage(update.message.chat_id, text="Я вас не понял")

    elif state == "question1":
        telegramuser.state = "question2"
        telegramuser.first_name = update.message.text
        telegramuser.save()
        bot.sendMessage(update.message.chat_id, text="Какая Ваша должность?")

    elif state == "question2":
        telegramuser.state = "question3"
        telegramuser.post = update.message.text
        telegramuser.save()
        bot.sendMessage(update.message.chat_id, text="Ваш email?")

    elif state == "question3":
        telegramuser.state = "question4"
        telegramuser.email = update.message.text
        telegramuser.save()
        KEYBOARD = [[telegram.KeyboardButton("Телефон", request_contact=True)]]
        reply_markup = telegram.ReplyKeyboardMarkup(KEYBOARD)
        bot.sendMessage(update.message.chat_id,
                        reply_markup=reply_markup,
                        text="Ваш телефон?")

    elif state == "question4":
        telegramuser.state = "main"
        if update.message.contact:
            telegramuser.phone = update.message.contact.phone_number
        else:
            telegramuser.phone = update.message.text
        telegramuser.save()
        KEYBOARD = [["Создать визитку"], ["Посмотреть визитку"]]
        reply_markup = telegram.ReplyKeyboardMarkup(KEYBOARD)
        bot.sendMessage(update.message.chat_id,
                        reply_markup=reply_markup,
                        text="Визитка сохранена!")
Ejemplo n.º 6
0
def start(bot, update):
    telegramuser, created = TelegramUser.get_or_create(
        chat_id=update.message.chat_id)
    telegramuser.state = "main"
    telegramuser.save()
    KEYBOARD = [["Создать визитку"], ["Посмотреть визитку"]]
    reply_markup = telegram.ReplyKeyboardMarkup(KEYBOARD)
    bot.sendMessage(update.message.chat_id,
                    reply_markup=reply_markup,
                    text='Hi!')
Ejemplo n.º 7
0
def add_log_string(user_id, place):
    try:
        add_telegram_user(user_id)
    except IntegrityError as de:
        pass
    telegram_user = TelegramUser.select().where(TelegramUser.user_id == user_id).get()
    row = LogRequest(
        telegram_user=telegram_user,
        place=place.title().strip(),
    )
    row.save()
Ejemplo n.º 8
0
def top5_place_user(user_id):
    try:
        telegram_user = TelegramUser.get(TelegramUser.user_id == user_id)
        query = (LogRequest
                 .select(LogRequest.place, fn.COUNT(LogRequest.place))
                 .where(LogRequest.telegram_user == telegram_user)
                 .group_by(LogRequest.place)
                 .order_by(fn.COUNT(LogRequest.place).desc())
                 .limit(5))
    except DoesNotExist:
        return ()
    return tuple(map(lambda item: item.place, query))
Ejemplo n.º 9
0
def message(bot, update):
    telegramuser, created = TelegramUser.get_or_create(chat_id=update.message.chat_id)
    state = telegramuser.state

    if state == "main":
        if update.message.text == "Создать визитку":
            telegramuser.state = "question1"
            telegramuser.save()
            bot.sendMessage(update.message.chat_id, reply_markup = telegram.ReplyKeyboardHide(), text="Как Вас зовут?")
            return

        elif update.message.text == "Посмотреть визитку":
            telegramuser.state = "main"
            telegramuser.save()
            bot.sendMessage(update.message.chat_id, text=getcard(update.message.chat_id), parse_mode='HTML')
            return
        else:
            bot.sendMessage(update.message.chat_id, text="Я вас не понял")

    elif state == "question1":
        telegramuser.state = "question2"
        telegramuser.first_name = update.message.text
        telegramuser.save()
        bot.sendMessage(update.message.chat_id, text="Какая Ваша должность?")

    elif state == "question2":
            telegramuser.state = "question3"
            telegramuser.post = update.message.text
            telegramuser.save()
            bot.sendMessage(update.message.chat_id, text="Ваш email?")

    elif state == "question3":
        telegramuser.state = "question4"
        telegramuser.email = update.message.text
        telegramuser.save()
        KEYBOARD = [[telegram.KeyboardButton("Телефон", request_contact=True)]]
        reply_markup = telegram.ReplyKeyboardMarkup(KEYBOARD)
        bot.sendMessage(update.message.chat_id, reply_markup=reply_markup, text="Ваш телефон?")

    elif state == "question4":
        telegramuser.state = "main"
        if update.message.contact:
            telegramuser.phone = update.message.contact.phone_number
        else:
            telegramuser.phone = update.message.text
        telegramuser.save()
        KEYBOARD = [["Создать визитку"], ["Посмотреть визитку"]]
        reply_markup = telegram.ReplyKeyboardMarkup(KEYBOARD)
        bot.sendMessage(update.message.chat_id, reply_markup = reply_markup, text="Визитка сохранена!")
Ejemplo n.º 10
0
    def telegram_on_message_callback(sender, msg, entity):
        if not sender:
            print("[telegram_on_message_callback] ERROR: no sender")
            return

        session = db_session()
        user = TelegramUser.query.filter(
            TelegramUser.user_id == sender.id).first()
        if not user:
            user = TelegramUser(sender.id, sender.first_name, sender.last_name,
                                sender.username)
            session.add(user)
            session.commit()

        # Format the message content
        if hasattr(msg, 'message'):
            content = msg.message
        else:
            print(
                "[telegram_on_message_callback] ERROR: hasattr(msg, 'message')"
            )
            return

        # And print it to the user
        db_msg = TelegramTextMessage.query.\
            filter(and_(TelegramTextMessage.message_id==msg.id, TelegramTextMessage.channel_id==entity.id)).\
            first()
        creation_time = datetime.datetime.now()
        if not db_msg:
            print(creation_time.strftime('%H%:%M | %d.%m'),
                  " [telegram_on_message_callback] new msg arrived")
            db_msg = TelegramTextMessage(msg.id, content, entity.id, sender.id,
                                         msg.reply_to_msg_id, creation_time)
            session.add(db_msg)
            session.commit()

            global message_queue
            message_queue.put(
                [entity.id, sender.id, msg.id, content, creation_time])
        else:
            print("[telegram_on_message_callback] msg already in the DB")

        session.close()
Ejemplo n.º 11
0
def add_telegram_user(user_id):
    row = TelegramUser(
        user_id=user_id,
    )
    row.save()
Ejemplo n.º 12
0
def add_subscription(user_id, place):
    telegram_user = TelegramUser.get(TelegramUser.user_id == user_id)
    telegram_user.subscription = place.title().strip()
    telegram_user.save()
Ejemplo n.º 13
0
def get_user(db: Collection, user_id: int) -> TelegramUser:
    result = db.find_one({'id': user_id})
    return TelegramUser(**result) if result else None
Ejemplo n.º 14
0
def getcard(chat_id):
    telegramuser, created = TelegramUser.get_or_create(chat_id=chat_id)
    card = "Моя виртуальная визитка:\n" + str(telegramuser.first_name) + "\n" + str(telegramuser.post) + "\nTel: " + str(telegramuser.phone) +"\nEmail: " + str(telegramuser.email)
    return card