【问题标题】:how can i add reply message in conversejs如何在 conversejs 中添加回复消息
【发布时间】:2023-03-05 13:20:02
【问题描述】:

我正在使用 converse.js 提供聊天功能。我正在寻找一种方法来添加回复特定聊天室消息。有谁知道我该怎么做?

例如: 在组 user1 中发送:你好 并且 user2 想要回复此消息并打个招呼

我的初始代码:

<script>
    converse.initialize({
        authentication: 'login',
        //
        auto_login: true,
        allow_logout: false,
        show_client_info: false,
        allow_adhoc_commands: false,
        allow_contact_requests: false,
        hidden_occupants: true,
        blacklisted_plugins: [
            'converse-register',
            'converse-rosterview',
            'converse-bookmarks',
            'converse-profile',
        ],
        jid: "person@example.com",
        password: "somepassword",
        auto_join_rooms: [
            {
                'jid': 'group@conference.example.com',
                'nick': 'myname',
                'name': 'title',
                'minimized': true
            },
        ],
        //
        auto_reconnect: true,
        bosh_service_url: 'https://example.com:7443/http-bind/',
        message_archiving: 'always',
        view_mode: 'fullscreen'
    });
</script>

谢谢大家。

【问题讨论】:

  • 从客户端或服务器端回复?也许给我们一个“第一次尝试”代码
  • 来自客户端:例如:在组 user1 中发送:你好,用户 2 想回复这条消息并打个招呼

标签: javascript converse.js


【解决方案1】:

我终于找到了解决这个问题的方法。

首先在 convers.js/src/plugins/chatview/view.jsonMessageEditButtonClicked 之前添加:

onMessageReplyButtonClicked (message) {
        const currently_correcting = this.model.messages.findWhere('correcting');
        const unsent_text = this.el.querySelector('.chat-textarea')?.value;
        if (unsent_text && (!currently_correcting || currently_correcting.get('message') !== unsent_text)) {
            if (!confirm(__('You have an unsent message which will be lost if you continue. Are you sure?'))) {
                return;
            }
        }
        this.insertIntoTextArea(u.prefixMentions(message, true), true, false);
    },

并在 convers.js/src/components/message-actions.js 文件中在 onMessageEditButtonClicked

之前添加以下代码
onMessageReplyButtonClicked(ev) {
        ev.preventDefault();
        this.chatview.onMessageReplyButtonClicked(this.model);
    }

并在 convers.js/src/headless/utils/cores.js 中将 u.prefixMentions 函数更改为:

u.prefixMentions = function (message, reply = false) {
    /* Given a message object, return its text with @ chars
     * inserted before the mentioned nicknames.
     */
    let text = message.get('message');
    (message.get('references') || [])
        .sort((a, b) => b.begin - a.begin)
        .forEach(ref => {
            text = `${text.slice(0, ref.begin)}@${text.slice(ref.begin)}`
        });

    if (reply){
        const lines = text.split('\n');
        let newtxt = ""
        for(let i = 0;i < lines.length;i++){
            if(!lines[i].startsWith(">")){
                newtxt += "> " + lines[i] + "\n"
            }
        }
        return "> reply to " + message.get('nick') + ":\n" + newtxt
    }
    else
        return text;
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    相关资源
    最近更新 更多