代码位置:https://leancloud.cn/docs/realtime-guide-systemconv.html#hash-1573260517
代码内容:
@engine.define
def _messageReceived(**params):
print('_messageReceived start')
content = json.loads(params['content'])
text = content._lctext
print('text:', text)
processed_content = text.replace('XX 传奇', '**')
print('_messageReceived end')
# 必须含有以下语句给服务端一个正确的返回,否则会引起异常
return {
'content': processed_content,
}
错误描述:
text = content._lctext这句有错误
修改这个错误后,所有发送的消息接收到的都是undefined
通过print可以看到processed_content是正确的内容

text = content._lctext这句有错误

具体的报错信息是什么?另外也请贴下发送的消息 json 序列化的内容,如果原消息不带 _lctext 字段,那因为访问了不存在的属性,自然会出错。

报错信息是:AttributeError: 'dict' object has no attribute '_lctext'
python的字典需要用content['_lctext']访问 直接用点访问应该是js里面的语法吧 ?
消息我是测试构建的 用的是文档里面的例子
具体代码为:
content = "{\"lctext\":\"来我们去 XX 传奇玩吧\",\"lctype\":-1}"
_messageReceived(content=content)

文档地址是 https://leancloud.cn/docs/realtime-guide-systemconv.html#hash-15732605171

可能我不太清楚这种钩子函数该如何debug。。请问有什么文档介绍之类的吗?

对对对,之前没看出来这里的错误。您改成 content['_lctext'] 试下?非常感谢反馈文档示例代码的错误。

我改完了以后部署上去 所有收到的信息都是undefined。

感觉这些示例代码放出来之前应该测试一下把。 joy

看起来文档的示例代码(包括其他语言的示例代码)确实有问题,稍后会测试后并更新示例代码。

好的!麻烦更新后通知一下我呢~ 感谢!

我测试了下,改成这样可以:(返回值的 content 应该和传入参数一样是一个 json 字符串,之前文档示例错误地把文本内容直接返回了)

@engine.define
def _messageReceived(**params):
    content = json.loads(params['content'])
    text = content['_lctext']
    content['_lctext'] = text.replace('XX 传奇', '**')
    return {
        'content': json.dumps(content)
    }