Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
uni-im
提交
794a3516
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看板
提交
794a3516
编写于
4月 25, 2024
作者:
DCloud_JSON
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
新增 仅限:好友之间、系统管理员参与的、群成员与群管理员,发起私聊
上级
47d3f415
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
75 addition
and
7 deletion
+75
-7
uniCloud/cloudfunctions/uni-im-co/msg.js
uniCloud/cloudfunctions/uni-im-co/msg.js
+75
-7
未找到文件。
uniCloud/cloudfunctions/uni-im-co/msg.js
浏览文件 @
794a3516
...
...
@@ -16,10 +16,10 @@ const createConfig = require("uni-config-center");
const
uniImConfig
=
createConfig
({
pluginId
:
'
uni-im
'
,
// 插件id
})
const
conversation_grade
=
uniImConfig
.
config
(
'
conversation_grade
'
)
// 发送消息方法(含:单聊和群聊)
async
function
sendMsg
(
params
)
{
// console.error('sendMsg params~~~~~', params);
await
_beforeSendMsgActions
.
call
(
this
,
params
)
let
{
...
...
@@ -58,7 +58,8 @@ async function sendMsg(params) {
appId
:
[
"
String
"
],
about_msg_id
:
[
'
String
'
],
action
:
[
'
String
'
],
is_mute
:
[
'
Boolean
'
]
is_mute
:
[
'
Boolean
'
],
chat_source
:
[
'
Object
'
]
}
})
...
...
@@ -160,7 +161,7 @@ async function sendMsg(params) {
// 创建新会话或者更新已有会话。
// 拿到消息接收者的isMute状态(仅私聊有效)
let
{
isMute
}
=
await
_createOrUpdateConversation
.
call
(
this
,
conversation_id
,
msgData
)
let
{
isMute
}
=
await
_createOrUpdateConversation
.
call
(
this
,
conversation_id
,
msgData
,
params
.
chat_source
)
// console.log({
// ...msgData,
// conversation_id
...
...
@@ -303,8 +304,6 @@ async function _checkConversationGrade({
* 100 - 客服 or 好友或者群成员
* 200 - 必须是好友或者群成员
**/
const
conversation_grade
=
uniImConfig
.
config
(
'
conversation_grade
'
)
switch
(
conversation_grade
)
{
case
0
:
//任何人可以发起会话,不校验
...
...
@@ -375,7 +374,7 @@ function _getLastMsgNote({
return
last_msg_note
}
async
function
_createOrUpdateConversation
(
conversation_id
,
msgData
)
{
async
function
_createOrUpdateConversation
(
conversation_id
,
msgData
,
chat_source
)
{
// 设置会话 最后一条消息 的描述
let
last_msg_note
=
_getLastMsgNote
(
msgData
)
...
...
@@ -412,13 +411,82 @@ async function _createOrUpdateConversation(conversation_id, msgData) {
let
getUserInfoRes
=
await
db
.
collection
(
'
uni-id-users
'
)
.
doc
(
this
.
current_uid
)
.
field
({
mobile_confirmed
:
1
email
:
1
,
nickname
:
1
,
role
:
1
})
.
get
()
if
(
!
getUserInfoRes
.
data
[
0
].
mobile_confirmed
){
throw
new
Error
(
'
账号未绑定手机号,无法发送消息
'
)
}
}
const
clientInfo
=
this
.
getClientInfo
()
if
(
conversation_grade
===
300
&&
msgData
.
to_uid
&&
clientInfo
.
source
!=
'
function
'
&&
this
.
current_uid
!=
'
system
'
){
// console.error('createOrUpdateConversation conversation_grade 300~~~~~',clientInfo.appVersionCode);
// TODO:用于向下兼容
if
(
clientInfo
.
appVersionCode
<
24042501
){
throw
new
Error
(
'
你的客户端版本过旧,不能发起新会话。请刷新后重试
'
)
}
// 仅限:系统管理员参与的 或 群成员向群管理员 发起私聊
let
check
=
false
// 消息发送者是系统管理员
if
(
this
.
current_user_role
.
includes
(
'
staff
'
)){
check
=
true
// console.error('createOrUpdateConversation staff~~~~~');
}
else
if
(
chat_source
&&
chat_source
.
group_id
){
// console.error('createOrUpdateConversation group_id~~~~~');
// 临时会话来源群,判断双方是否有一个是群管理员
let
{
data
:
[
member
],
}
=
await
dbUniImGroupMember
.
where
({
group_id
:
chat_source
.
group_id
,
user_id
:
dbCmd
.
in
([
msgData
.
from_uid
,
msgData
.
to_uid
]),
role
:
dbCmd
.
in
([
'
admin
'
])
})
.
get
()
if
(
member
){
check
=
true
// console.error('createOrUpdateConversation member~~~~~', member);
}
}
else
{
// 判断消息接收者是否为系统管理员(staff)
let
{
data
:
[
receiver
],
}
=
await
db
.
collection
(
'
uni-id-users
'
)
.
doc
(
msgData
.
to_uid
)
.
field
({
role
:
1
,
nickname
:
1
,
avatar_file
:
1
,
})
.
get
()
// console.error('createOrUpdateConversation receiver~~~~~', receiver);
if
(
receiver
&&
receiver
.
role
?.
includes
(
'
staff
'
)){
// console.error('createOrUpdateConversation receiver.staff~~~~~');
check
=
true
}
}
if
(
!
check
){
let
{
data
:
[
has
]
}
=
await
dbUniImFriend
.
where
({
friend_uid
:
msgData
.
to_uid
,
user_id
:
this
.
current_uid
})
.
get
()
if
(
has
){
check
=
true
}
}
if
(
!
check
){
throw
new
Error
(
'
仅限:好友之间、系统管理员参与的、群成员与群管理员,发起私聊
'
)
}
}
// 1.消息发送者 会话数据
senderConversation
=
{
id
:
conversation_id
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录