-
Notifications
You must be signed in to change notification settings - Fork 37
Expand file tree
/
Copy pathconversation.py
More file actions
152 lines (130 loc) · 4.02 KB
/
Copy pathconversation.py
File metadata and controls
152 lines (130 loc) · 4.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# coding: utf-8
"""
实时通讯会话相关操作。
"""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
import json
from datetime import datetime
import arrow
from leancloud import client
from leancloud.object_ import Object
class Conversation(Object):
"""
:param name: 会话名称
:param is_system: 是否系统会话
:param is_transient: 是否暂态会话
:param is_unique: 是否重用成员相同的会话(暂停会话不支持此参数)
"""
def __init__(self, name=None, is_system=False, is_transient=False, is_unique=None):
super(Conversation, self).__init__()
if name:
self.set("name", name)
if is_system:
self.set("sys", True)
if is_transient:
self.set("tr", True)
else:
if is_unique is not None:
self.set("unique", is_unique)
@property
def name(self):
"""
获取此会话名称。
"""
return self.get("name")
@property
def creator(self):
"""
获取此会话创建者。
"""
return self.get("c")
@property
def last_message_read_at(self):
"""
获取此会话最后一条已读消息时间。
"""
return self.get("lm")
@property
def members(self):
"""
获取此会话所有参与者。
"""
return self.get("m")
@property
def muted_members(self):
"""
获取所有将此会话设置为静音的参与者。
"""
return self.get("mu")
@property
def is_system(self):
"""
是否为系统会话。
"""
return self.get("sys")
@property
def is_transient(self):
"""
是否为暂态会话。
"""
return self.get("tr")
@property
def is_unique(self):
"""
是否为 unique 会话。
"""
return self.get("unique")
def add_member(self, client_id):
"""
将指定参与者加入会话。
"""
return self.add("m", client_id)
def send(
self, from_client, message, to_clients=None, transient=False, push_data=None
):
"""
在指定会话中发送消息。
:param from_client: 发送者 id
:param message: 消息内容
:param to_clients: 接受者 id,只在系统会话中生效
:param transient: 是否以暂态形式发送消息
:param push_data: 推送消息内容,参考:https://url.leanapp.cn/pushData
"""
if isinstance(message, dict):
message = json.dumps(message)
params = {
"from_peer": from_client,
"conv_id": self.id,
"transient": transient,
"message": message,
}
if to_clients:
params["to_peers"] = to_clients
if push_data:
params["push_data"] = push_data
client.post("/rtm/messages", params=params).json()
def broadcast(self, from_client, message, valid_till=None, push_data=None):
"""
发送广播消息,只能以系统会话名义发送。全部用户都会收到此消息,不论是否在此会话中。
:param from_client: 发送者 id
:param message: 消息内容
:param valid_till: 指定广播消息过期时间
:param puhs_data: 推送消息内容,参考:https://url.leanapp.cn/pushData
"""
if isinstance(message, dict):
message = json.dumps(message)
params = {
"from_peer": from_client,
"conv_id": self.id,
"message": message,
}
if push_data:
params["push_data"] = push_data
if valid_till:
if isinstance(valid_till, datetime):
valid_till = arrow.get(valid_till).datetime
params["valid_till"] = valid_till
client.post("/rtm/broadcast", params=params).json()