aiocqhttp icon indicating copy to clipboard operation
aiocqhttp copied to clipboard

MessageSegment 加法會使變量被改變

Open cleoold opened this issue 5 years ago • 2 comments

问题描述 title

复现方法 Paste code below

期望的行为

日志信息 ...

相关代码

In [19]: msg1=MessageSegment.text('seg1')

In [20]: msg2=MessageSegment.text('seg2')

In [21]: msg1 + msg2
Out[21]: [{'type': 'text', 'data': {'text': 'seg1seg2'}}]

In [22]: msg1
Out[22]: {'type': 'text', 'data': {'text': 'seg1seg2'}}  # changed

In [23]: msg2
Out[23]: {'type': 'text', 'data': {'text': 'seg2'}}

In [24]:

运行环境

  • aiocqhttp 版本:master
  • Python 版本:3.7

MessageSegment 因爲繼承了 dict,所以是可變類型。不過對於這個問題還要討論,歡迎給出建議。

cleoold avatar Apr 29 '21 02:04 cleoold

居然还有这问题

似乎应该在 Message.__init__ 里面 extendappend 的时候做深拷贝

stdrc avatar Apr 29 '21 02:04 stdrc

主要问题在于 Message.reduce 会合并 text 消息段,而 MessageSegment 又直接 append 到了 Message 的里,没有拷贝

stdrc avatar Apr 29 '21 02:04 stdrc