Support inbound channel adding, and log remaining events
Also use more consistent grammar for event log messages
This commit is contained in:
parent
91af7890ac
commit
db33378345
@ -515,6 +515,11 @@ class Client:
|
|||||||
str(data["channelType"]),
|
str(data["channelType"]),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def _on_channel_added(self, data: dict[str, JSON]) -> Awaitable[None]:
|
||||||
|
return self.user.on_channel_added(
|
||||||
|
ChannelInfo.deserialize(data["channelInfo"]),
|
||||||
|
)
|
||||||
|
|
||||||
def _on_channel_join(self, data: dict[str, JSON]) -> Awaitable[None]:
|
def _on_channel_join(self, data: dict[str, JSON]) -> Awaitable[None]:
|
||||||
return self.user.on_channel_join(
|
return self.user.on_channel_join(
|
||||||
ChannelInfo.deserialize(data["channelInfo"]),
|
ChannelInfo.deserialize(data["channelInfo"]),
|
||||||
|
@ -58,6 +58,7 @@ METRIC_CHAT_READ = Summary("bridge_on_chat_read", "calls to on_chat_read")
|
|||||||
METRIC_CHANNEL_META_CHANGE = Summary("bridge_on_channel_meta_change", "calls to on_channel_meta_change")
|
METRIC_CHANNEL_META_CHANGE = Summary("bridge_on_channel_meta_change", "calls to on_channel_meta_change")
|
||||||
METRIC_PROFILE_CHANGE = Summary("bridge_on_profile_changed", "calls to on_profile_changed")
|
METRIC_PROFILE_CHANGE = Summary("bridge_on_profile_changed", "calls to on_profile_changed")
|
||||||
METRIC_PERM_CHANGE = Summary("bridge_on_perm_changed", "calls to on_perm_changed")
|
METRIC_PERM_CHANGE = Summary("bridge_on_perm_changed", "calls to on_perm_changed")
|
||||||
|
METRIC_CHANNEL_ADDED = Summary("bridge_on_channel_added", "calls to on_channel_added")
|
||||||
METRIC_CHANNEL_JOIN = Summary("bridge_on_channel_join", "calls to on_channel_join")
|
METRIC_CHANNEL_JOIN = Summary("bridge_on_channel_join", "calls to on_channel_join")
|
||||||
METRIC_CHANNEL_LEFT = Summary("bridge_on_channel_left", "calls to on_channel_left")
|
METRIC_CHANNEL_LEFT = Summary("bridge_on_channel_left", "calls to on_channel_left")
|
||||||
METRIC_CHANNEL_KICKED = Summary("bridge_on_channel_kicked", "calls to on_channel_kicked")
|
METRIC_CHANNEL_KICKED = Summary("bridge_on_channel_kicked", "calls to on_channel_kicked")
|
||||||
@ -790,9 +791,23 @@ class User(DBUser, BaseUser):
|
|||||||
user_power_levels = await po.Portal.get_mapped_ktid_power_levels(user_id, power_level)
|
user_power_levels = await po.Portal.get_mapped_ktid_power_levels(user_id, power_level)
|
||||||
await portal.set_power_levels(user_power_levels)
|
await portal.set_power_levels(user_power_levels)
|
||||||
|
|
||||||
|
@async_time(METRIC_CHANNEL_ADDED)
|
||||||
|
def on_channel_added(self, channel_info: ChannelInfo) -> Awaitable[None]:
|
||||||
|
return self._sync_channel(channel_info)
|
||||||
|
|
||||||
@async_time(METRIC_CHANNEL_JOIN)
|
@async_time(METRIC_CHANNEL_JOIN)
|
||||||
async def on_channel_join(self, channel_info: ChannelInfo) -> None:
|
async def on_channel_join(self, channel_info: ChannelInfo) -> None:
|
||||||
assert self.ktid
|
assert self.ktid
|
||||||
|
portal = await po.Portal.get_by_ktid(
|
||||||
|
channel_info.channelId,
|
||||||
|
kt_receiver=self.ktid,
|
||||||
|
kt_type=channel_info.type,
|
||||||
|
)
|
||||||
|
if portal.mxid:
|
||||||
|
user = await pu.Puppet.get_by_ktid(self.ktid)
|
||||||
|
await portal.backfill_lock.wait("channel join")
|
||||||
|
await portal.handle_kakaotalk_user_join(self, user)
|
||||||
|
else:
|
||||||
await self._sync_channel(channel_info)
|
await self._sync_channel(channel_info)
|
||||||
|
|
||||||
@async_time(METRIC_CHANNEL_LEFT)
|
@async_time(METRIC_CHANNEL_LEFT)
|
||||||
|
@ -118,7 +118,7 @@ class UserClient {
|
|||||||
this.peerClient = peerClient
|
this.peerClient = peerClient
|
||||||
|
|
||||||
this.#talkClient.on("chat", (data, channel) => {
|
this.#talkClient.on("chat", (data, channel) => {
|
||||||
this.log(`${data.chat.logId} received in channel ${channel.channelId}`)
|
this.log(`Chat ${data.chat.logId} received in channel ${channel.channelId}`)
|
||||||
this.write("chat", {
|
this.write("chat", {
|
||||||
//is_sequential: true, // TODO Make sequential per user & channel (if it isn't already)
|
//is_sequential: true, // TODO Make sequential per user & channel (if it isn't already)
|
||||||
chatlog: data.chat,
|
chatlog: data.chat,
|
||||||
@ -128,7 +128,7 @@ class UserClient {
|
|||||||
})
|
})
|
||||||
|
|
||||||
this.#talkClient.on("chat_deleted", (feedChatlog, channel, feed) => {
|
this.#talkClient.on("chat_deleted", (feedChatlog, channel, feed) => {
|
||||||
this.log(`${feed.logId} deleted in channel ${channel.channelId} by user ${feedChatlog.sender.userId}`)
|
this.log(`Chat ${feed.logId} deleted in channel ${channel.channelId} by user ${feedChatlog.sender.userId}`)
|
||||||
this.write("chat_deleted", {
|
this.write("chat_deleted", {
|
||||||
chatId: feed.logId,
|
chatId: feed.logId,
|
||||||
senderId: feedChatlog.sender.userId,
|
senderId: feedChatlog.sender.userId,
|
||||||
@ -150,7 +150,7 @@ class UserClient {
|
|||||||
})
|
})
|
||||||
|
|
||||||
this.#talkClient.on("chat_read", (chat, channel, reader) => {
|
this.#talkClient.on("chat_read", (chat, channel, reader) => {
|
||||||
this.log(`${chat.logId} read in channel ${channel.channelId} by ${reader.userId}`)
|
this.log(`Chat ${chat.logId} read in channel ${channel.channelId} by ${reader.userId}`)
|
||||||
this.write("chat_read", {
|
this.write("chat_read", {
|
||||||
chatId: chat.logId,
|
chatId: chat.logId,
|
||||||
senderId: reader.userId,
|
senderId: reader.userId,
|
||||||
@ -159,8 +159,13 @@ class UserClient {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
this.#talkClient.on("chat_event", (channel, author, type, count, chat) => {
|
||||||
|
// TODO Figure out if this is can ever be for anything other than hearts on Shouts
|
||||||
|
this.log(`Event ${type} (count = ${count}) on chat ${chat.logId} in channel ${channel.channelId} sent by user ${author.userId}`)
|
||||||
|
})
|
||||||
|
|
||||||
this.#talkClient.on("profile_changed", (channel, lastInfo, user) => {
|
this.#talkClient.on("profile_changed", (channel, lastInfo, user) => {
|
||||||
this.log(`Profile of ${user.userId} changed (channel: ${channel ? channel.channelId : "None"})`)
|
this.log(`Profile of ${user.userId} changed (in channel ${channel ? channel.channelId : "None"})`)
|
||||||
this.write("profile_changed", {
|
this.write("profile_changed", {
|
||||||
info: user,
|
info: user,
|
||||||
/* TODO Is this ever a per-channel profile change?
|
/* TODO Is this ever a per-channel profile change?
|
||||||
@ -182,6 +187,18 @@ class UserClient {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
this.#talkClient.on("host_handover", (channel, lastLink, link) => {
|
||||||
|
// TODO Find how or if this relates to permissions
|
||||||
|
this.log(`Host of channel ${channel.channelId} changed from ${lastLink.linkOwner.nickname} to ${link.linkOwner.nickname}`)
|
||||||
|
})
|
||||||
|
|
||||||
|
this.#talkClient.on("channel_added", channel => {
|
||||||
|
this.log(`Added channel ${channel.channelId}`)
|
||||||
|
this.write("channel_added", {
|
||||||
|
channelInfo: channel.info,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
this.#talkClient.on("channel_join", channel => {
|
this.#talkClient.on("channel_join", channel => {
|
||||||
this.log(`Joined channel ${channel.channelId}`)
|
this.log(`Joined channel ${channel.channelId}`)
|
||||||
this.write("channel_join", {
|
this.write("channel_join", {
|
||||||
@ -198,7 +215,8 @@ class UserClient {
|
|||||||
})
|
})
|
||||||
|
|
||||||
this.#talkClient.on("channel_kicked", (kickedLog, channel, feed) => {
|
this.#talkClient.on("channel_kicked", (kickedLog, channel, feed) => {
|
||||||
this.log(`User ${feed.member.userId} kicked from channel ${channel.channelId} by user ${kickedLog.sender.userId}`)
|
// TODO Confirm whether this can refer to any user that was kicked, or only to the current user
|
||||||
|
this.log(`Kicked from channel ${channel.channelId}`)
|
||||||
this.write("channel_kicked", {
|
this.write("channel_kicked", {
|
||||||
userId: feed.member.userId,
|
userId: feed.member.userId,
|
||||||
senderId: kickedLog.sender.userId,
|
senderId: kickedLog.sender.userId,
|
||||||
@ -207,6 +225,21 @@ class UserClient {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
this.#talkClient.on("channel_link_deleted", (feedChatLog, channel, feed) => {
|
||||||
|
// TODO Figure out what this means
|
||||||
|
this.log(`Channel link deleted in channel ${channel.channelId}: feed=${JSON.stringify(feed)}, feedChatLog=${JSON.stringify(feedChatLog)}`)
|
||||||
|
})
|
||||||
|
|
||||||
|
this.#talkClient.on("link_created", link => {
|
||||||
|
// TODO Figure out what this means
|
||||||
|
this.log(`Link created: ${JSON.stringify(link)}`)
|
||||||
|
})
|
||||||
|
|
||||||
|
this.#talkClient.on("link_deleted", link => {
|
||||||
|
// TODO Figure out what this means
|
||||||
|
this.log(`Link deleted: ${JSON.stringify(link)}`)
|
||||||
|
})
|
||||||
|
|
||||||
this.#talkClient.on("user_join", (joinLog, channel, user, feed) => {
|
this.#talkClient.on("user_join", (joinLog, channel, user, feed) => {
|
||||||
this.log(`User ${user.userId} joined channel ${channel.channelId}`)
|
this.log(`User ${user.userId} joined channel ${channel.channelId}`)
|
||||||
this.write("user_join", {
|
this.write("user_join", {
|
||||||
@ -226,6 +259,7 @@ class UserClient {
|
|||||||
})
|
})
|
||||||
|
|
||||||
this.#talkClient.on("meta_change", (channel, type, newMeta) => {
|
this.#talkClient.on("meta_change", (channel, type, newMeta) => {
|
||||||
|
// TODO Handle announcements as pinned messages
|
||||||
this.log(`Channel ${channel.channelId} metadata changed`)
|
this.log(`Channel ${channel.channelId} metadata changed`)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user