def _stats(self):
        """
        Command /stats
        Shows the links sent count for every user in the current chat
        """
        users = User.select(User, fn.Count(Link.url).alias('links')) \
            .join(Link, on=Link.user) \
            .join(Chat, on=Link.chat) \
            .where(Link.chat.id == self.update.message.chat_id) \
            .group_by(User) \
            .order_by(SQL('links').desc())

        self.responser.reply_stats(users)
Esempio n. 2
0
def write_stats(msg):
    if msg.content:
        db.connect(reuse_if_open=True)
        db.create_tables([User, Message])
        user_q = User.select().where(User.user_id == msg.user['id'])
        users = [user for user in user_q]
        if len(users) == 0:
            is_telegram = True if msg.is_telegram else False
            user = User.create(user_id=msg.user['id'],
                               is_telegram=is_telegram,
                               username=msg.user['name'])
            user.save()
        else:
            user = users[0]
        msg = Message.create(user=user,
                             message=msg.content,
                             timestamp=round(datetime.now().timestamp()))
        msg.save()
Esempio n. 3
0
    def cmd_getusers(self, _, update):
        page_size = 10

        if update.callback_query:
            page = int(update.callback_query.data)
        else:
            page = 1

        if update.effective_chat.type != update.effective_message.chat.PRIVATE:
            permission = 0
        else:
            permission = User.from_tg(update.effective_user).permission

        users = User.select().order_by(
            desc(User.permission),
            desc(User.last_update)
        )
        users, pages = get_page(users, page, page_size)
        if pages < 1:
            return 'no users', 1, 1, True

        offset = page_size * (page - 1)
        res = '\n'.join(
            '{0}. ({5}) <a href="tg://user?id={1}">{1}</a> {2} {3} {4}'
            .format(
                i,
                html.escape(user.name),
                html.escape(
                    (' '.join(data.phone for data in user.phones)
                     if permission >= P.ADMIN else None) or '<no phone>'
                ),
                html.escape(user.full_name or '<no name>'),
                html.escape(user.username or '<no username>'),
                user.permission
            )
            for i, user in enumerate(users, offset + 1)
        )
        res = 'users page %d / %d:\n\n%s' % (page, pages, res)
        return res, page, pages, False, ParseMode.HTML