Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
uni-im
提交
77ce0bfd
U
uni-im
项目概览
DCloud
/
uni-im
通知
3
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-im
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
77ce0bfd
编写于
6月 24, 2024
作者:
DCloud_JSON
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修复 被解散/踢出群的群成员收不到相关事件通知的问题
上级
dd9e2966
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
37 addition
and
26 deletion
+37
-26
uniCloud/cloudfunctions/uni-im-co/msg.js
uniCloud/cloudfunctions/uni-im-co/msg.js
+37
-26
未找到文件。
uniCloud/cloudfunctions/uni-im-co/msg.js
浏览文件 @
77ce0bfd
...
@@ -548,41 +548,22 @@ async function _createOrUpdateConversation(conversation_id, msgData, chat_source
...
@@ -548,41 +548,22 @@ async function _createOrUpdateConversation(conversation_id, msgData, chat_source
delete
updateObj
.
unread_count
delete
updateObj
.
unread_count
}
}
// 如果消息是:群解散 的触发动作通知,则更新会话表的leave字段为true
if
(
msgData
.
action
===
"
group-dissolved
"
)
{
updateObj
.
leave
=
true
}
// 所有接收者的会话表更新
// 所有接收者的会话表更新
let
res
=
await
dbUniImConversation
let
res
=
await
dbUniImConversation
.
where
({
.
where
({
id
:
conversation_id
,
id
:
conversation_id
,
user_id
:
dbCmd
.
neq
(
msgData
.
from_uid
)
user_id
:
dbCmd
.
neq
(
msgData
.
from_uid
),
leave
:
dbCmd
.
neq
(
true
)
})
})
.
update
(
updateObj
)
.
update
(
updateObj
)
// console.log(res);
// console.log(res);
//
特殊用户的会话表更新
//
更新发送者的会话( 发送者的消息未读数不需要 +1 )
delete
updateObj
.
unread_count
delete
updateObj
.
unread_count
let
updateUids
=
[]
if
(
msgData
.
action
===
'
group-exit
'
)
{
// 主动退群:更新发送者的会话
delete
updateObj
.
last_msg_note
updateObj
.
leave
=
true
updateUids
.
push
(
msgData
.
from_uid
)
}
else
if
(
msgData
.
action
===
'
group-expel
'
)
{
// 踢出群:更新被踢者的会话
delete
updateObj
.
last_msg_note
updateObj
.
leave
=
true
updateUids
.
push
(...
msgData
.
body
.
user_id_list
)
}
else
{
// 其它情况:更新发送者的会话
updateUids
.
push
(
msgData
.
from_uid
)
}
res
=
await
dbUniImConversation
res
=
await
dbUniImConversation
.
where
({
.
where
({
id
:
conversation_id
,
id
:
conversation_id
,
user_id
:
dbCmd
.
in
(
updateUids
)
user_id
:
msgData
.
from_uid
})
})
.
update
(
updateObj
)
.
update
(
updateObj
)
// console.log(res);
// console.log(res);
...
@@ -847,7 +828,6 @@ async function sendMsgToGroup({
...
@@ -847,7 +828,6 @@ async function sendMsgToGroup({
user_id
:
dbCmd
.
neq
(
pushParam
.
payload
.
data
.
from_uid
)
user_id
:
dbCmd
.
neq
(
pushParam
.
payload
.
data
.
from_uid
)
}
}
if
(
before_id
)
{
if
(
before_id
)
{
getMemberwhere
.
_id
=
dbCmd
.
gt
(
before_id
)
getMemberwhere
.
_id
=
dbCmd
.
gt
(
before_id
)
}
}
...
@@ -892,13 +872,44 @@ async function sendMsgToGroup({
...
@@ -892,13 +872,44 @@ async function sendMsgToGroup({
return
sum
return
sum
},
[])
},
[])
console
.
log
(
'
查到需要接收消息的设备数:
'
,
push_clientids
.
length
);
console
.
log
(
'
查到需要接收消息的设备数:
'
,
push_clientids
.
length
);
// 消息接收者用户id
const
receiverUids
=
member
.
map
(
user
=>
user
.
user_id
)
const
msgData
=
pushParam
.
payload
.
data
// console.error('###########msgData.action', msgData.action);
// 更新:退群、解散群、被踢出群 相关的用户会话
if
(
receiverUids
.
length
&&
[
"
group-exit
"
,
"
group-expel
"
,
"
group-dissolved
"
].
includes
(
msgData
.
action
)){
const
updateUids
=
[]
if
(
msgData
.
action
==
'
group-exit
'
)
{
// 主动退群时,仅退群用户所在“消息推送批次”时更新会话即可
if
(
receiverUids
.
includes
(
msgData
.
from_uid
)){
updateUids
.
push
(
msgData
.
from_uid
)
}
}
else
{
// 群解散、被踢出群时,所有“本批次”的用户会话都需要更新(注:分批 解散/退出群 的设计模式)
updateUids
.
push
(...
receiverUids
)
// 解散群时,在第一批次时,增加更新操作者(群主)的会话
if
(
!
before_id
&&
msgData
.
action
==
'
group-dissolved
'
){
updateUids
.
push
(
msgData
.
from_uid
)
}
}
if
(
updateUids
.
length
){
let
res
=
await
dbUniImConversation
.
where
({
id
:
msgData
.
conversation_id
,
user_id
:
dbCmd
.
in
(
updateUids
)
})
.
update
({
"
leave
"
:
true
})
// console.error('###########更新退群或者被踢出群的用户会话', res);
}
}
// WS 推送:群聊消息推送给相关用户
// WS 推送:群聊消息推送给相关用户
let
msgData
=
pushParam
.
payload
.
data
if
(
!
mute
&&
!
_isMuteMsg
(
msgData
)
&&
(
await
_isReadableMsg
(
msgData
)))
{
if
(
!
mute
&&
!
_isMuteMsg
(
msgData
)
&&
(
await
_isReadableMsg
(
msgData
)))
{
const
{
invokeExts
}
=
require
(
'
uni-im-ext
'
)
const
{
invokeExts
}
=
require
(
'
uni-im-ext
'
)
await
invokeExts
(
'
push-msg-notify
'
,
{
await
invokeExts
(
'
push-msg-notify
'
,
{
to_uids
:
member
.
map
(
user
=>
user
.
user_id
)
,
to_uids
:
receiverUids
,
msg
:
{
msg
:
{
type
:
'
incr-conversation
'
,
type
:
'
incr-conversation
'
,
conversation_id
:
msgData
.
conversation_id
,
conversation_id
:
msgData
.
conversation_id
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录