Commit 29c2a964 authored by JC Brand's avatar JC Brand

Bot message doesn't appear when it has the same id as its command

parent aaaacf25
......@@ -5,6 +5,8 @@
- Bugfix. Login form doesn't render after logging out, when `auto_reconnect = false`
[jcbrand]
- Also indicate new day for the first day's messages. [jcbrand]
- Chat bot messages don't appear when they have the same ids as their commands.
[jcbrand]
## 1.0.2 (2016-05-24)
......
......@@ -1134,7 +1134,6 @@
this.Message = Backbone.Model.extend({
idAttribute: 'msgid',
defaults: function(){
return {
msgid: converse.connection.getUniqueId()
......@@ -1173,7 +1172,6 @@
delayed = $delay.length > 0,
fullname = this.get('fullname'),
is_groupchat = $message.attr('type') === 'groupchat',
msgid = $message.attr('id'),
chat_state = $message.find(converse.COMPOSING).length && converse.COMPOSING ||
$message.find(converse.PAUSED).length && converse.PAUSED ||
$message.find(converse.INACTIVE).length && converse.INACTIVE ||
......@@ -1205,7 +1203,7 @@
delayed: delayed,
fullname: fullname,
message: body || undefined,
msgid: msgid,
msgid: $message.attr('id'),
sender: sender,
time: time
});
......
......@@ -830,7 +830,6 @@
var $message = $(message),
$forwarded = $message.find('forwarded'),
$delay;
if ($forwarded.length) {
$message = $forwarded.children('message');
$delay = $forwarded.children('delay');
......@@ -839,10 +838,22 @@
msgid = $message.attr('id'),
resource = Strophe.getResourceFromJid(jid),
sender = resource && Strophe.unescapeNode(resource) || '',
subject = $message.children('subject').text();
if (msgid && this.model.messages.findWhere({msgid: msgid})) {
return true; // We already have this message stored.
subject = $message.children('subject').text(),
text = $message.find('body').text(),
collision = msgid && this.model.messages.findWhere({'msgid': msgid});
if (collision) {
// We already have a message with this id stored.
// It might therefore be a duplicate, but we cannot yet be
// 100% sure. Some bots (like HAL in the prosody
// chatroom) respond to commands with the same ID as
// the original message. We therefore also check whether
// the sender is the same and then lastly whether the
// message text is the same.
if (collision.get('fullname') === sender) {
if (this.model.messages.findWhere({'message': text})) {
return true;
}
}
}
if (subject) {
this.$el.find('.chatroom-topic').text(subject).attr('title', subject);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment