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)
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()
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