Skip to content

Commit 355d55b

Browse files
committed
feat(msg): add GreyTips elem (send only)
1 parent 8726330 commit 355d55b

File tree

4 files changed

+74
-1
lines changed

4 files changed

+74
-1
lines changed

lagrange/client/message/elems.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,3 +178,13 @@ def grp_paste_build(cls, file_size: int, file_name: str, file_md5: bytes, file_i
178178
@classmethod
179179
def pri_paste_build(cls, file_size: int, file_name: str, file_md5: bytes, file_uuid: str, file_hash: str) -> "File":
180180
return cls._paste_build(file_size, file_name, file_md5, file_uuid=file_uuid, file_hash=file_hash)
181+
182+
183+
@dataclass
184+
class GreyTips(Text):
185+
"""
186+
奇怪的整活元素
187+
建议搭配Text使用
188+
冷却3分钟左右?
189+
"""
190+
...

lagrange/client/message/encoder.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import json
12
import struct
23
import zlib
34
from typing import Optional
@@ -16,6 +17,8 @@
1617
MarketFace as PBMarketFace,
1718
NotOnlineImage,
1819
SrcMsgArgs,
20+
PBGreyTips,
21+
GeneralFlags,
1922
)
2023
from lagrange.pb.message.rich_text.elems import Text as PBText
2124

@@ -33,6 +36,7 @@
3336
Text,
3437
Poke,
3538
MarketFace,
39+
GreyTips,
3640
)
3741
from .types import Element
3842

@@ -175,6 +179,20 @@ def build_message(msg_chain: list[Element], compatible=True) -> RichText:
175179
)
176180
)
177181
)
182+
elif isinstance(msg, GreyTips):
183+
content = json.dumps({
184+
"gray_tip": msg.text,
185+
"object_type": 3,
186+
"sub_type": 2,
187+
"type": 4,
188+
})
189+
msg_pb.append(
190+
Elems(
191+
general_flags=GeneralFlags(
192+
PbReserve=PBGreyTips.build(content).encode()
193+
)
194+
)
195+
)
178196
elif isinstance(msg, Text):
179197
msg_pb.append(Elems(text=PBText(string=msg.text)))
180198
elif isinstance(msg, Poke):

lagrange/pb/message/rich_text/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
Text,
1919
TransElem,
2020
VideoFile,
21+
GeneralFlags,
2122
)
2223

2324
__all__ = ["Elems", "RichText"]
@@ -35,7 +36,7 @@ class Elems(ProtoStruct, debug=True):
3536
rich_msg: Optional[RichMsg] = proto_field(12, default=None)
3637
extra_info: Optional[ExtraInfo] = proto_field(16, default=None)
3738
video_file: Optional[VideoFile] = proto_field(19, default=None)
38-
general_flags: Optional[bytes] = proto_field(37, default=None)
39+
general_flags: Optional[GeneralFlags] = proto_field(37, default=None)
3940
open_data: Optional[OpenData] = proto_field(41, default=None)
4041
src_msg: Optional[SrcMsg] = proto_field(45, default=None)
4142
mini_app: Optional[MiniApp] = proto_field(51, default=None)

lagrange/pb/message/rich_text/elems.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,3 +196,47 @@ class GroupFileExtra(ProtoStruct):
196196
file_name: str = proto_field(2)
197197
display: str = proto_field(3)
198198
inner: GroupFileExtraInner = proto_field(7)
199+
200+
201+
class GeneralFlags(ProtoStruct):
202+
BubbleDiyTextId: Optional[int] = proto_field(1, default=None)
203+
GroupFlagNew: Optional[int] = proto_field(2, default=None)
204+
Uin: Optional[int] = proto_field(3, default=None)
205+
RpId: Optional[bytes] = proto_field(4, default=None)
206+
PrpFold: Optional[int] = proto_field(5, default=None)
207+
LongTextFlag: Optional[int] = proto_field(6, default=None)
208+
LongTextResId: Optional[str] = proto_field(7, default=None)
209+
GroupType: Optional[int] = proto_field(8, default=None)
210+
ToUinFlag: Optional[int] = proto_field(9, default=None)
211+
GlamourLevel: Optional[int] = proto_field(10, default=None)
212+
MemberLevel: Optional[int] = proto_field(11, default=None)
213+
GroupRankSeq: Optional[int] = proto_field(12, default=None)
214+
OlympicTorch: Optional[int] = proto_field(13, default=None)
215+
BabyqGuideMsgCookie: Optional[bytes] = proto_field(14, default=None)
216+
Uin32ExpertFlag: Optional[int] = proto_field(15, default=None)
217+
BubbleSubId: Optional[int] = proto_field(16, default=None)
218+
PendantId: Optional[int] = proto_field(17, default=None)
219+
RpIndex: Optional[bytes] = proto_field(18, default=None)
220+
PbReserve: Optional[bytes] = proto_field(19)
221+
222+
223+
class GreyTipsExtraInfo(ProtoStruct):
224+
typ: int = proto_field(1, default=1)
225+
content: str = proto_field(2) # json
226+
227+
228+
class GreyTipsExtra(ProtoStruct):
229+
body: GreyTipsExtraInfo = proto_field(1)
230+
231+
class PBGreyTips(ProtoStruct):
232+
grey: GreyTipsExtra = proto_field(101)
233+
234+
@classmethod
235+
def build(cls, content: str) -> "PBGreyTips":
236+
return cls(
237+
grey=GreyTipsExtra(
238+
body=GreyTipsExtraInfo(
239+
content=content,
240+
)
241+
)
242+
)

0 commit comments

Comments
 (0)