Nickname mention detecting, channel and role mentions in cleanContent

This commit is contained in:
abalabahaha
2016-04-30 13:01:06 -07:00
parent e48f2ffae3
commit 1f5002ae41
4 changed files with 99 additions and 27 deletions

View File

@@ -190,11 +190,10 @@ var Resolver = (function () {
return Promise.resolve(resource);
};
Resolver.prototype.resolveMentions = function resolveMentions(resource) {
// resource is a string
Resolver.prototype.resolveMentions = function resolveMentions(resource, channel) {
var _mentions = [];
var changed = resource;
for (var _iterator2 = resource.match(/<@[0-9]+>/g) || [], _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
for (var _iterator2 = resource.match(/<@\!?[0-9]+>/g) || [], _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
var _ref2;
if (_isArray2) {
@@ -207,12 +206,62 @@ var Resolver = (function () {
}
var mention = _ref2;
// username mention
if (mention[2] === '!') {
var user = this.internal.users.get("id", mention.substring(3, mention.length - 1));
if (user) {
_mentions.push(user);
var details = channel.server.detailsOf(user);
if (details) {
changed = changed.replace(new RegExp(mention, "g"), "@" + (details.nick || user.username + "#" + user.discriminator));
}
}
} else {
var user = this.internal.users.get("id", mention.substring(2, mention.length - 1));
if (user) {
_mentions.push(user);
changed = changed.replace(new RegExp(mention, "g"), "@" + (user.username + "#" + user.discriminator));
}
}
}
if (channel && channel.server && channel.server.roles) {
for (var _iterator3 = resource.match(/<@&[0-9]+>/g) || [], _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
var _ref3;
var userID = mention.substring(2, mention.length - 1);
var user = this.internal.client.users.get("id", userID);
if (user) {
_mentions.push(user);
changed = changed.replace(new RegExp(mention, "g"), "@" + user.username);
if (_isArray3) {
if (_i3 >= _iterator3.length) break;
_ref3 = _iterator3[_i3++];
} else {
_i3 = _iterator3.next();
if (_i3.done) break;
_ref3 = _i3.value;
}
var mention = _ref3;
// role mention
var role = channel.server.roles.get("id", mention.substring(3, mention.length - 1));
if (role) {
changed = changed.replace(new RegExp(mention, "g"), "@" + role.name);
}
}
}
for (var _iterator4 = resource.match(/<#[0-9]+>/g) || [], _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {
var _ref4;
if (_isArray4) {
if (_i4 >= _iterator4.length) break;
_ref4 = _iterator4[_i4++];
} else {
_i4 = _iterator4.next();
if (_i4.done) break;
_ref4 = _i4.value;
}
var mention = _ref4;
// channel mention
var channel = this.internal.channels.get("id", mention.substring(2, mention.length - 1));
if (channel) {
changed = changed.replace(new RegExp(mention, "g"), "#" + channel.name);
}
}
return [_mentions, changed];
@@ -299,19 +348,19 @@ var Resolver = (function () {
}
if (resource instanceof _StructuresUser2["default"]) {
// see if a PM exists
for (var _iterator3 = this.internal.private_channels, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
var _ref3;
for (var _iterator5 = this.internal.private_channels, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {
var _ref5;
if (_isArray3) {
if (_i3 >= _iterator3.length) break;
_ref3 = _iterator3[_i3++];
if (_isArray5) {
if (_i5 >= _iterator5.length) break;
_ref5 = _iterator5[_i5++];
} else {
_i3 = _iterator3.next();
if (_i3.done) break;
_ref3 = _i3.value;
_i5 = _iterator5.next();
if (_i5.done) break;
_ref5 = _i5.value;
}
var pmchat = _ref3;
var pmchat = _ref5;
if (pmchat.recipient.equals(resource)) {
return Promise.resolve(pmchat);