mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-20 05:23:31 +01:00
Nickname mention detecting, channel and role mentions in cleanContent
This commit is contained in:
@@ -190,11 +190,10 @@ var Resolver = (function () {
|
|||||||
return Promise.resolve(resource);
|
return Promise.resolve(resource);
|
||||||
};
|
};
|
||||||
|
|
||||||
Resolver.prototype.resolveMentions = function resolveMentions(resource) {
|
Resolver.prototype.resolveMentions = function resolveMentions(resource, channel) {
|
||||||
// resource is a string
|
|
||||||
var _mentions = [];
|
var _mentions = [];
|
||||||
var changed = resource;
|
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;
|
var _ref2;
|
||||||
|
|
||||||
if (_isArray2) {
|
if (_isArray2) {
|
||||||
@@ -207,12 +206,62 @@ var Resolver = (function () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var mention = _ref2;
|
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);
|
if (_isArray3) {
|
||||||
var user = this.internal.client.users.get("id", userID);
|
if (_i3 >= _iterator3.length) break;
|
||||||
if (user) {
|
_ref3 = _iterator3[_i3++];
|
||||||
_mentions.push(user);
|
} else {
|
||||||
changed = changed.replace(new RegExp(mention, "g"), "@" + user.username);
|
_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];
|
return [_mentions, changed];
|
||||||
@@ -299,19 +348,19 @@ var Resolver = (function () {
|
|||||||
}
|
}
|
||||||
if (resource instanceof _StructuresUser2["default"]) {
|
if (resource instanceof _StructuresUser2["default"]) {
|
||||||
// see if a PM exists
|
// see if a PM exists
|
||||||
for (var _iterator3 = this.internal.private_channels, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
|
for (var _iterator5 = this.internal.private_channels, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {
|
||||||
var _ref3;
|
var _ref5;
|
||||||
|
|
||||||
if (_isArray3) {
|
if (_isArray5) {
|
||||||
if (_i3 >= _iterator3.length) break;
|
if (_i5 >= _iterator5.length) break;
|
||||||
_ref3 = _iterator3[_i3++];
|
_ref5 = _iterator5[_i5++];
|
||||||
} else {
|
} else {
|
||||||
_i3 = _iterator3.next();
|
_i5 = _iterator5.next();
|
||||||
if (_i3.done) break;
|
if (_i5.done) break;
|
||||||
_ref3 = _i3.value;
|
_ref5 = _i5.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
var pmchat = _ref3;
|
var pmchat = _ref5;
|
||||||
|
|
||||||
if (pmchat.recipient.equals(resource)) {
|
if (pmchat.recipient.equals(resource)) {
|
||||||
return Promise.resolve(pmchat);
|
return Promise.resolve(pmchat);
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ var Message = (function (_Equality) {
|
|||||||
|
|
||||||
this.content = data.content;
|
this.content = data.content;
|
||||||
|
|
||||||
var mentionData = client.internal.resolver.resolveMentions(data.content);
|
var mentionData = client.internal.resolver.resolveMentions(data.content, channel);
|
||||||
this.cleanContent = mentionData[1];
|
this.cleanContent = mentionData[1];
|
||||||
this.mentions = [];
|
this.mentions = [];
|
||||||
|
|
||||||
|
|||||||
@@ -132,16 +132,39 @@ export default class Resolver {
|
|||||||
return Promise.resolve(resource);
|
return Promise.resolve(resource);
|
||||||
}
|
}
|
||||||
|
|
||||||
resolveMentions(resource) {
|
resolveMentions(resource, channel) {
|
||||||
// resource is a string
|
|
||||||
var _mentions = [];
|
var _mentions = [];
|
||||||
var changed = resource;
|
var changed = resource;
|
||||||
for (var mention of (resource.match(/<@[0-9]+>/g) || [])) {
|
for (var mention of (resource.match(/<@\!?[0-9]+>/g) || [])) { // username mention
|
||||||
var userID = mention.substring(2, mention.length - 1);
|
if (mention[2] === '!') {
|
||||||
var user = this.internal.client.users.get("id", userID);
|
var user = this.internal.users.get("id", mention.substring(3, mention.length - 1));
|
||||||
if (user) {
|
if (user) {
|
||||||
_mentions.push(user);
|
_mentions.push(user);
|
||||||
changed = changed.replace(new RegExp(mention, "g"), `@${user.username}`);
|
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 mention of (resource.match(/<@&[0-9]+>/g) || [])) { // 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 mention of (resource.match(/<#[0-9]+>/g) || [])) { // 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];
|
return [_mentions, changed];
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ export default class Message extends Equality{
|
|||||||
|
|
||||||
this.content = data.content;
|
this.content = data.content;
|
||||||
|
|
||||||
var mentionData = client.internal.resolver.resolveMentions(data.content);
|
var mentionData = client.internal.resolver.resolveMentions(data.content, channel);
|
||||||
this.cleanContent = mentionData[1];
|
this.cleanContent = mentionData[1];
|
||||||
this.mentions = [];
|
this.mentions = [];
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user