diff --git a/src/snek/service/channel.py b/src/snek/service/channel.py index ecc9519..b9d69a8 100644 --- a/src/snek/service/channel.py +++ b/src/snek/service/channel.py @@ -67,6 +67,10 @@ class ChannelService(BaseService): await self.services.channel_member.create_dm(channel["uid"], user1, user2) return channel + async def get_recent_users(self, channel_uid): + async for user in self.query("SELECT user.uid, user.username,user.color,user.last_ping,user.nick FROM channel_member INNER JOIN user ON user.uid = channel_member.user_uid WHERE channel_uid=:channel_uid ORDER BY last_ping DESC LIMIT 30", {"channel_uid": channel_uid}): + yield user + async def get_users(self, channel_uid): async for channel_member in self.services.channel_member.find( channel_uid=channel_uid, diff --git a/src/snek/static/chat-input.js b/src/snek/static/chat-input.js index aa534cc..943769c 100644 --- a/src/snek/static/chat-input.js +++ b/src/snek/static/chat-input.js @@ -56,7 +56,7 @@ class ChatInputComponent extends HTMLElement { } extractMentions(text) { - const regex = /@([a-zA-Z0-9_]+)/g; + const regex = /@([a-zA-Z0-9_-]+)/g; const mentions = []; let match; @@ -81,7 +81,6 @@ class ChatInputComponent extends HTMLElement { distance += 10 } - console.warn([ mention, author, distance ]); if (distance < minDistance) { minDistance = distance; closestAuthor = author; @@ -153,7 +152,7 @@ levenshteinDistance(a, b) { parseInt(this.getAttribute("live-type-interval")) || 3; this.channelUid = this.getAttribute("channel"); - app.rpc.getUsers(this.channelUid).then(users=>{ + app.rpc.getRecentUsers(this.channelUid).then(users=>{ this.users = users }) this.messageUid = null; diff --git a/src/snek/view/rpc.py b/src/snek/view/rpc.py index 7fc1658..f379bf1 100644 --- a/src/snek/view/rpc.py +++ b/src/snek/view/rpc.py @@ -327,6 +327,19 @@ class RPCView(BaseView): await self.ws.send_json(obj) return "noresponse" + async def get_recent_users(self, channel_uid): + self._require_login() + + return [ + { + "uid": record["uid"], + "username": record["username"], + "nick": record["nick"], + "last_ping": record["last_ping"], + } + async for record in self.services.channel.get_recent_users(channel_uid) + ] + async def get_users(self, channel_uid): self._require_login()