mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-18 12:33:30 +01:00
Clean up a bunch of promise stuff
This commit is contained in:
@@ -40,7 +40,7 @@ class ClientManager {
|
|||||||
resolve(token);
|
resolve(token);
|
||||||
this.client.clearTimeout(timeout);
|
this.client.clearTimeout(timeout);
|
||||||
});
|
});
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -58,10 +58,10 @@ class ClientManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
destroy() {
|
destroy() {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise(resolve => {
|
||||||
this.client.ws.destroy();
|
this.client.ws.destroy();
|
||||||
if (!this.client.user.bot) {
|
if (!this.client.user.bot) {
|
||||||
this.client.rest.methods.logout().then(resolve, reject);
|
resolve(this.client.rest.methods.logout());
|
||||||
} else {
|
} else {
|
||||||
resolve();
|
resolve();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ class RESTMethods {
|
|||||||
}
|
}
|
||||||
|
|
||||||
loginToken(token = this.rest.client.token) {
|
loginToken(token = this.rest.client.token) {
|
||||||
token = token.replace(/^Bot\s*/i, '');
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
|
token = token.replace(/^Bot\s*/i, '');
|
||||||
this.rest.client.manager.connectToWebSocket(token, resolve, reject);
|
this.rest.client.manager.connectToWebSocket(token, resolve, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -32,8 +32,7 @@ class RESTMethods {
|
|||||||
this.rest.makeRequest('post', Constants.Endpoints.login, false, { email, password })
|
this.rest.makeRequest('post', Constants.Endpoints.login, false, { email, password })
|
||||||
.then(data => {
|
.then(data => {
|
||||||
resolve(this.loginToken(data.token));
|
resolve(this.loginToken(data.token));
|
||||||
})
|
}, reject);
|
||||||
.catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,8 +46,7 @@ class RESTMethods {
|
|||||||
.then(res => {
|
.then(res => {
|
||||||
this.rest.client.ws.gateway = `${res.url}/?encoding=json&v=${Constants.PROTOCOL_VERSION}`;
|
this.rest.client.ws.gateway = `${res.url}/?encoding=json&v=${Constants.PROTOCOL_VERSION}`;
|
||||||
resolve(this.rest.client.ws.gateway);
|
resolve(this.rest.client.ws.gateway);
|
||||||
})
|
}, reject);
|
||||||
.catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,7 +69,7 @@ class RESTMethods {
|
|||||||
if (channel instanceof User || channel instanceof GuildMember) {
|
if (channel instanceof User || channel instanceof GuildMember) {
|
||||||
this.createDM(channel).then(chan => {
|
this.createDM(channel).then(chan => {
|
||||||
this._sendMessageRequest(chan, content, file, tts, nonce, resolve, reject);
|
this._sendMessageRequest(chan, content, file, tts, nonce, resolve, reject);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
} else {
|
} else {
|
||||||
this._sendMessageRequest(channel, content, file, tts, nonce, resolve, reject);
|
this._sendMessageRequest(channel, content, file, tts, nonce, resolve, reject);
|
||||||
}
|
}
|
||||||
@@ -93,20 +91,19 @@ class RESTMethods {
|
|||||||
return this.rest.makeRequest('post', Constants.Endpoints.channelMessages(channel.id), true, {
|
return this.rest.makeRequest('post', Constants.Endpoints.channelMessages(channel.id), true, {
|
||||||
content: content[i2], tts, nonce,
|
content: content[i2], tts, nonce,
|
||||||
}, file);
|
}, file);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
} else {
|
} else {
|
||||||
promise.then(data => {
|
promise.then(data => {
|
||||||
datas.push(data);
|
datas.push(data);
|
||||||
resolve(this.rest.client.actions.MessageCreate.handle(datas).messages);
|
resolve(this.rest.client.actions.MessageCreate.handle(datas).messages);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this.rest.makeRequest('post', Constants.Endpoints.channelMessages(channel.id), true, {
|
this.rest.makeRequest('post', Constants.Endpoints.channelMessages(channel.id), true, {
|
||||||
content, tts, nonce,
|
content, tts, nonce,
|
||||||
}, file)
|
}, file)
|
||||||
.then(data => resolve(this.rest.client.actions.MessageCreate.handle(data).message))
|
.then(data => resolve(this.rest.client.actions.MessageCreate.handle(data).message), reject);
|
||||||
.catch(reject);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -118,8 +115,7 @@ class RESTMethods {
|
|||||||
id: message.id,
|
id: message.id,
|
||||||
channel_id: message.channel.id,
|
channel_id: message.channel.id,
|
||||||
}).message);
|
}).message);
|
||||||
})
|
}, reject);
|
||||||
.catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -132,8 +128,7 @@ class RESTMethods {
|
|||||||
channel_id: channel.id,
|
channel_id: channel.id,
|
||||||
ids: messages,
|
ids: messages,
|
||||||
}).messages);
|
}).messages);
|
||||||
})
|
}, reject);
|
||||||
.catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,7 +140,7 @@ class RESTMethods {
|
|||||||
content,
|
content,
|
||||||
}).then(data => {
|
}).then(data => {
|
||||||
resolve(this.rest.client.actions.MessageUpdate.handle(data).updated);
|
resolve(this.rest.client.actions.MessageUpdate.handle(data).updated);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -156,7 +151,7 @@ class RESTMethods {
|
|||||||
type: channelType,
|
type: channelType,
|
||||||
}).then(data => {
|
}).then(data => {
|
||||||
resolve(this.rest.client.actions.ChannelCreate.handle(data).channel);
|
resolve(this.rest.client.actions.ChannelCreate.handle(data).channel);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -172,7 +167,7 @@ class RESTMethods {
|
|||||||
if (dmChannel) return resolve(dmChannel);
|
if (dmChannel) return resolve(dmChannel);
|
||||||
return this.rest.makeRequest('post', Constants.Endpoints.userChannels(this.rest.client.user.id), true, {
|
return this.rest.makeRequest('post', Constants.Endpoints.userChannels(this.rest.client.user.id), true, {
|
||||||
recipient_id: recipient.id,
|
recipient_id: recipient.id,
|
||||||
}).then(data => resolve(this.rest.client.actions.ChannelCreate.handle(data).channel)).catch(reject);
|
}).then(data => resolve(this.rest.client.actions.ChannelCreate.handle(data).channel), reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -182,7 +177,7 @@ class RESTMethods {
|
|||||||
this.rest.makeRequest('del', Constants.Endpoints.channel(channel.id), true).then(data => {
|
this.rest.makeRequest('del', Constants.Endpoints.channel(channel.id), true).then(data => {
|
||||||
data.id = channel.id;
|
data.id = channel.id;
|
||||||
resolve(this.rest.client.actions.ChannelDelete.handle(data).channel);
|
resolve(this.rest.client.actions.ChannelDelete.handle(data).channel);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -195,7 +190,7 @@ class RESTMethods {
|
|||||||
|
|
||||||
this.rest.makeRequest('patch', Constants.Endpoints.channel(channel.id), true, data).then(newData => {
|
this.rest.makeRequest('patch', Constants.Endpoints.channel(channel.id), true, data).then(newData => {
|
||||||
resolve(this.rest.client.actions.ChannelUpdate.handle(newData).updated);
|
resolve(this.rest.client.actions.ChannelUpdate.handle(newData).updated);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,7 +199,7 @@ class RESTMethods {
|
|||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.rest.makeRequest('del', Constants.Endpoints.meGuild(guild.id), true).then(() => {
|
this.rest.makeRequest('del', Constants.Endpoints.meGuild(guild.id), true).then(() => {
|
||||||
resolve(this.rest.client.actions.GuildDelete.handle({ id: guild.id }).guild);
|
resolve(this.rest.client.actions.GuildDelete.handle({ id: guild.id }).guild);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -212,8 +207,7 @@ class RESTMethods {
|
|||||||
options.icon = this.rest.client.resolver.resolveBase64(options.icon) || null;
|
options.icon = this.rest.client.resolver.resolveBase64(options.icon) || null;
|
||||||
options.region = options.region || 'us-central';
|
options.region = options.region || 'us-central';
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.rest.makeRequest('post', Constants.Endpoints.guilds, true, options)
|
this.rest.makeRequest('post', Constants.Endpoints.guilds, true, options).then(data => {
|
||||||
.then(data => {
|
|
||||||
if (this.rest.client.guilds.has(data.id)) resolve(this.rest.client.guilds.get(data.id));
|
if (this.rest.client.guilds.has(data.id)) resolve(this.rest.client.guilds.get(data.id));
|
||||||
const handleGuild = guild => {
|
const handleGuild = guild => {
|
||||||
if (guild.id === data.id) resolve(guild);
|
if (guild.id === data.id) resolve(guild);
|
||||||
@@ -224,7 +218,7 @@ class RESTMethods {
|
|||||||
this.rest.client.removeListener('guildCreate', handleGuild);
|
this.rest.client.removeListener('guildCreate', handleGuild);
|
||||||
reject(new Error('Took too long to receive guild data'));
|
reject(new Error('Took too long to receive guild data'));
|
||||||
}, 10000);
|
}, 10000);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -233,15 +227,15 @@ class RESTMethods {
|
|||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.rest.makeRequest('del', Constants.Endpoints.guild(guild.id), true).then(() => {
|
this.rest.makeRequest('del', Constants.Endpoints.guild(guild.id), true).then(() => {
|
||||||
resolve(this.rest.client.actions.GuildDelete.handle({ id: guild.id }).guild);
|
resolve(this.rest.client.actions.GuildDelete.handle({ id: guild.id }).guild);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getUser(userID) {
|
getUser(userID) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.rest.makeRequest('get', Constants.Endpoints.user(userID), true).then((data) => {
|
this.rest.makeRequest('get', Constants.Endpoints.user(userID), true).then(data => {
|
||||||
resolve(this.rest.client.actions.UserGet.handle(data).user);
|
resolve(this.rest.client.actions.UserGet.handle(data).user);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -259,8 +253,7 @@ class RESTMethods {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.rest.makeRequest('patch', Constants.Endpoints.me, true, data)
|
this.rest.makeRequest('patch', Constants.Endpoints.me, true, data)
|
||||||
.then(newData => resolve(this.rest.client.actions.UserUpdate.handle(newData).updated))
|
.then(newData => resolve(this.rest.client.actions.UserUpdate.handle(newData).updated), reject);
|
||||||
.catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -277,8 +270,7 @@ class RESTMethods {
|
|||||||
if (_data.splash) data.splash = this.rest.client.resolver.resolveBase64(_data.splash);
|
if (_data.splash) data.splash = this.rest.client.resolver.resolveBase64(_data.splash);
|
||||||
|
|
||||||
this.rest.makeRequest('patch', Constants.Endpoints.guild(guild.id), true, data)
|
this.rest.makeRequest('patch', Constants.Endpoints.guild(guild.id), true, data)
|
||||||
.then(newData => resolve(this.rest.client.actions.GuildUpdate.handle(newData).updated))
|
.then(newData => resolve(this.rest.client.actions.GuildUpdate.handle(newData).updated), reject);
|
||||||
.catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -289,7 +281,7 @@ class RESTMethods {
|
|||||||
guild_id: guild.id,
|
guild_id: guild.id,
|
||||||
user: member.user,
|
user: member.user,
|
||||||
}).member);
|
}).member);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -300,7 +292,7 @@ class RESTMethods {
|
|||||||
guild_id: guild.id,
|
guild_id: guild.id,
|
||||||
role,
|
role,
|
||||||
}).role);
|
}).role);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -311,24 +303,21 @@ class RESTMethods {
|
|||||||
guild_id: role.guild.id,
|
guild_id: role.guild.id,
|
||||||
role_id: role.id,
|
role_id: role.id,
|
||||||
}).role);
|
}).role);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
setChannelOverwrite(channel, payload) {
|
setChannelOverwrite(channel, payload) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.rest.makeRequest('put', `${Constants.Endpoints.channelPermissions(channel.id)}/${payload.id}`, true, payload)
|
this.rest.makeRequest('put', `${Constants.Endpoints.channelPermissions(channel.id)}/${payload.id}`, true, payload)
|
||||||
.then(resolve)
|
.then(resolve, reject);
|
||||||
.catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
deletePermissionOverwrites(overwrite) {
|
deletePermissionOverwrites(overwrite) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const endpoint = `${Constants.Endpoints.channelPermissions(overwrite.channel.id)}/${overwrite.id}`;
|
const endpoint = `${Constants.Endpoints.channelPermissions(overwrite.channel.id)}/${overwrite.id}`;
|
||||||
this.rest.makeRequest('del', endpoint, true)
|
this.rest.makeRequest('del', endpoint, true).then(() => resolve(overwrite), reject);
|
||||||
.then(() => resolve(overwrite))
|
|
||||||
.catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -342,9 +331,7 @@ class RESTMethods {
|
|||||||
|
|
||||||
let endpoint = Constants.Endpoints.channelMessages(channel.id);
|
let endpoint = Constants.Endpoints.channelMessages(channel.id);
|
||||||
if (params.length > 0) endpoint += `?${params.join('&')}`;
|
if (params.length > 0) endpoint += `?${params.join('&')}`;
|
||||||
this.rest.makeRequest('get', endpoint, true)
|
this.rest.makeRequest('get', endpoint, true).then(resolve, reject);
|
||||||
.then(resolve)
|
|
||||||
.catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -354,17 +341,15 @@ class RESTMethods {
|
|||||||
if (msg) return resolve(msg);
|
if (msg) return resolve(msg);
|
||||||
|
|
||||||
const endpoint = Constants.Endpoints.channelMessage(channel.id, messageID);
|
const endpoint = Constants.Endpoints.channelMessage(channel.id, messageID);
|
||||||
return this.rest.makeRequest('get', endpoint, true)
|
return this.rest.makeRequest('get', endpoint, true).then(resolve, reject);
|
||||||
.then(resolve)
|
|
||||||
.catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getGuildMember(guild, user) {
|
getGuildMember(guild, user) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.rest.makeRequest('get', Constants.Endpoints.guildMember(guild.id, user.id), true).then((data) => {
|
this.rest.makeRequest('get', Constants.Endpoints.guildMember(guild.id, user.id), true).then(data => {
|
||||||
resolve(this.rest.client.actions.GuildMemberGet.handle(guild, data).member);
|
resolve(this.rest.client.actions.GuildMemberGet.handle(guild, data).member);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -382,17 +367,12 @@ class RESTMethods {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.rest.makeRequest('patch', endpoint, true, data)
|
this.rest.makeRequest('patch', endpoint, true, data)
|
||||||
.then(resData => resolve(member.guild._updateMember(member, resData).mem))
|
.then(resData => resolve(member.guild._updateMember(member, resData).mem), reject);
|
||||||
.catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
sendTyping(channelID) {
|
sendTyping(channelID) {
|
||||||
return new Promise((resolve, reject) => {
|
return this.rest.makeRequest('post', `${Constants.Endpoints.channel(channelID)}/typing`, true);
|
||||||
this.rest.makeRequest('post', `${Constants.Endpoints.channel(channelID)}/typing`, true)
|
|
||||||
.then(resolve)
|
|
||||||
.catch(reject);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
banGuildMember(guild, member, deleteDays = 0) {
|
banGuildMember(guild, member, deleteDays = 0) {
|
||||||
@@ -415,14 +395,14 @@ class RESTMethods {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
resolve(id);
|
resolve(id);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
unbanGuildMember(guild, member) {
|
unbanGuildMember(guild, member) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const id = this.rest.client.resolver.resolveUserID(member);
|
const id = this.rest.client.resolver.resolveUserID(member);
|
||||||
if (!id) throw new Error('Couldn\'t resolve the user ID to ban.');
|
if (!id) throw new Error('Couldn\'t resolve the user ID to unban.');
|
||||||
|
|
||||||
const listener = (eGuild, eUser) => {
|
const listener = (eGuild, eUser) => {
|
||||||
if (eGuild.id === guild.id && eUser.id === id) {
|
if (eGuild.id === guild.id && eUser.id === id) {
|
||||||
@@ -444,7 +424,7 @@ class RESTMethods {
|
|||||||
bannedUsers.set(user.id, user);
|
bannedUsers.set(user.id, user);
|
||||||
}
|
}
|
||||||
resolve(bannedUsers);
|
resolve(bannedUsers);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -476,23 +456,21 @@ class RESTMethods {
|
|||||||
role: _role,
|
role: _role,
|
||||||
guild_id: role.guild.id,
|
guild_id: role.guild.id,
|
||||||
}).updated);
|
}).updated);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
pinMessage(message) {
|
pinMessage(message) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.rest.makeRequest('put', `${Constants.Endpoints.channel(message.channel.id)}/pins/${message.id}`, true)
|
this.rest.makeRequest('put', `${Constants.Endpoints.channel(message.channel.id)}/pins/${message.id}`, true)
|
||||||
.then(() => resolve(message))
|
.then(() => resolve(message), reject);
|
||||||
.catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
unpinMessage(message) {
|
unpinMessage(message) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.rest.makeRequest('del', `${Constants.Endpoints.channel(message.channel.id)}/pins/${message.id}`, true)
|
this.rest.makeRequest('del', `${Constants.Endpoints.channel(message.channel.id)}/pins/${message.id}`, true)
|
||||||
.then(() => resolve(message))
|
.then(() => resolve(message), reject);
|
||||||
.catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -508,24 +486,21 @@ class RESTMethods {
|
|||||||
payload.max_uses = options.maxUses;
|
payload.max_uses = options.maxUses;
|
||||||
|
|
||||||
this.rest.makeRequest('post', `${Constants.Endpoints.channelInvites(channel.id)}`, true, payload)
|
this.rest.makeRequest('post', `${Constants.Endpoints.channelInvites(channel.id)}`, true, payload)
|
||||||
.then(invite => resolve(new Invite(this.rest.client, invite)))
|
.then(invite => resolve(new Invite(this.rest.client, invite)), reject);
|
||||||
.catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteInvite(invite) {
|
deleteInvite(invite) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.rest.makeRequest('del', Constants.Endpoints.invite(invite.code), true)
|
this.rest.makeRequest('del', Constants.Endpoints.invite(invite.code), true)
|
||||||
.then(() => resolve(invite))
|
.then(() => resolve(invite), reject);
|
||||||
.catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getInvite(code) {
|
getInvite(code) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.rest.makeRequest('get', Constants.Endpoints.invite(code), true)
|
this.rest.makeRequest('get', Constants.Endpoints.invite(code), true)
|
||||||
.then(invite => resolve(new Invite(this.rest.client, invite)))
|
.then(invite => resolve(new Invite(this.rest.client, invite)), reject);
|
||||||
.catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -538,16 +513,14 @@ class RESTMethods {
|
|||||||
invites.set(invite.code, invite);
|
invites.set(invite.code, invite);
|
||||||
}
|
}
|
||||||
resolve(invites);
|
resolve(invites);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
pruneGuildMembers(guild, days, dry) {
|
pruneGuildMembers(guild, days, dry) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.rest.makeRequest(dry ? 'get' : 'post', `${Constants.Endpoints.guildPrune(guild.id)}?days=${days}`, true)
|
this.rest.makeRequest(dry ? 'get' : 'post', `${Constants.Endpoints.guildPrune(guild.id)}?days=${days}`, true)
|
||||||
.then(data => {
|
.then(data => resolve(data.pruned), reject);
|
||||||
resolve(data.pruned);
|
|
||||||
}).catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -556,7 +529,7 @@ class RESTMethods {
|
|||||||
this.rest.makeRequest('post', `${Constants.Endpoints.guildEmojis(guild.id)}`, true, { name: name, image: image })
|
this.rest.makeRequest('post', `${Constants.Endpoints.guildEmojis(guild.id)}`, true, { name: name, image: image })
|
||||||
.then(data => {
|
.then(data => {
|
||||||
resolve(this.rest.client.actions.EmojiCreate.handle(data, guild).emoji);
|
resolve(this.rest.client.actions.EmojiCreate.handle(data, guild).emoji);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -565,7 +538,7 @@ class RESTMethods {
|
|||||||
this.rest.makeRequest('delete', `${Constants.Endpoints.guildEmojis(emoji.guild.id)}/${emoji.id}`, true)
|
this.rest.makeRequest('delete', `${Constants.Endpoints.guildEmojis(emoji.guild.id)}/${emoji.id}`, true)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
resolve(this.rest.client.actions.EmojiDelete.handle(emoji).data);
|
resolve(this.rest.client.actions.EmojiDelete.handle(emoji).data);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -574,7 +547,7 @@ class RESTMethods {
|
|||||||
this.rest.makeRequest('get', Constants.Endpoints.webhook(id, token), require('util').isUndefined(token))
|
this.rest.makeRequest('get', Constants.Endpoints.webhook(id, token), require('util').isUndefined(token))
|
||||||
.then(data => {
|
.then(data => {
|
||||||
resolve(new Webhook(this.rest.client, data));
|
resolve(new Webhook(this.rest.client, data));
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -587,7 +560,7 @@ class RESTMethods {
|
|||||||
hooks.set(hook.id, new Webhook(this.rest.client, hook));
|
hooks.set(hook.id, new Webhook(this.rest.client, hook));
|
||||||
}
|
}
|
||||||
resolve(hooks);
|
resolve(hooks);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -600,7 +573,7 @@ class RESTMethods {
|
|||||||
hooks.set(hook.id, new Webhook(this.rest.client, hook));
|
hooks.set(hook.id, new Webhook(this.rest.client, hook));
|
||||||
}
|
}
|
||||||
resolve(hooks);
|
resolve(hooks);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -609,10 +582,7 @@ class RESTMethods {
|
|||||||
this.rest.makeRequest('post', Constants.Endpoints.channelWebhooks(channel.id), true, {
|
this.rest.makeRequest('post', Constants.Endpoints.channelWebhooks(channel.id), true, {
|
||||||
name,
|
name,
|
||||||
avatar,
|
avatar,
|
||||||
})
|
}).then(data => resolve(new Webhook(this.rest.client, data)), reject);
|
||||||
.then(data => {
|
|
||||||
resolve(new Webhook(this.rest.client, data));
|
|
||||||
}).catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -625,7 +595,7 @@ class RESTMethods {
|
|||||||
webhook.name = data.name;
|
webhook.name = data.name;
|
||||||
webhook.avatar = data.avatar;
|
webhook.avatar = data.avatar;
|
||||||
resolve(webhook);
|
resolve(webhook);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -643,10 +613,7 @@ class RESTMethods {
|
|||||||
|
|
||||||
this.rest.makeRequest('post', `${Constants.Endpoints.webhook(webhook.id, webhook.token)}?wait=true`, false, {
|
this.rest.makeRequest('post', `${Constants.Endpoints.webhook(webhook.id, webhook.token)}?wait=true`, false, {
|
||||||
content: content, username: webhook.name, avatar_url: avatarURL, tts: tts, file: file, embeds: embeds,
|
content: content, username: webhook.name, avatar_url: avatarURL, tts: tts, file: file, embeds: embeds,
|
||||||
})
|
}).then(data => resolve(data), reject);
|
||||||
.then(data => {
|
|
||||||
resolve(data);
|
|
||||||
}).catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -657,9 +624,7 @@ class RESTMethods {
|
|||||||
`${Constants.Endpoints.webhook(webhook.id, webhook.token)}/slack?wait=true`,
|
`${Constants.Endpoints.webhook(webhook.id, webhook.token)}/slack?wait=true`,
|
||||||
false,
|
false,
|
||||||
body
|
body
|
||||||
).then(data => {
|
).then(data => resolve(data), reject);
|
||||||
resolve(data);
|
|
||||||
}).catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -668,45 +633,35 @@ class RESTMethods {
|
|||||||
this.rest.makeRequest('post', Constants.Endpoints.relationships('@me'), true, {
|
this.rest.makeRequest('post', Constants.Endpoints.relationships('@me'), true, {
|
||||||
discriminator: user.discriminator,
|
discriminator: user.discriminator,
|
||||||
username: user.username,
|
username: user.username,
|
||||||
}).then(() => {
|
}).then(() => resolve(user), reject);
|
||||||
resolve(user);
|
|
||||||
}).catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
removeFriend(user) {
|
removeFriend(user) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.rest.makeRequest('delete', `${Constants.Endpoints.relationships('@me')}/${user.id}`, true)
|
this.rest.makeRequest('delete', `${Constants.Endpoints.relationships('@me')}/${user.id}`, true)
|
||||||
.then(() => {
|
.then(() => resolve(user), reject);
|
||||||
resolve(user);
|
|
||||||
}).catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
fetchUserProfile(user) {
|
fetchUserProfile(user) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.rest.makeRequest('get', Constants.Endpoints.userProfile(user.id), true)
|
this.rest.makeRequest('get', Constants.Endpoints.userProfile(user.id), true)
|
||||||
.then(data => {
|
.then(data => resolve(new UserProfile(user, data)), reject);
|
||||||
resolve(new UserProfile(user, data));
|
|
||||||
}).catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
blockUser(user) {
|
blockUser(user) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.rest.makeRequest('put', `${Constants.Endpoints.relationships('@me')}/${user.id}`, true, { type: 2 })
|
this.rest.makeRequest('put', `${Constants.Endpoints.relationships('@me')}/${user.id}`, true, { type: 2 })
|
||||||
.then(() => {
|
.then(() => resolve(user), reject);
|
||||||
resolve(user);
|
|
||||||
}).catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
unblockUser(user) {
|
unblockUser(user) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.rest.makeRequest('delete', `${Constants.Endpoints.relationships('@me')}/${user.id}`, true)
|
this.rest.makeRequest('delete', `${Constants.Endpoints.relationships('@me')}/${user.id}`, true)
|
||||||
.then(() => {
|
.then(() => resolve(user), reject);
|
||||||
resolve(user);
|
|
||||||
}).catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -718,8 +673,7 @@ class RESTMethods {
|
|||||||
guild_id: guildID,
|
guild_id: guildID,
|
||||||
roles,
|
roles,
|
||||||
}).guild);
|
}).guild);
|
||||||
})
|
}, reject);
|
||||||
.catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -733,8 +687,7 @@ class RESTMethods {
|
|||||||
emoji: parseEmoji(emoji),
|
emoji: parseEmoji(emoji),
|
||||||
channel_id: channelID,
|
channel_id: channelID,
|
||||||
}).reaction);
|
}).reaction);
|
||||||
})
|
}, reject);
|
||||||
.catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -752,8 +705,7 @@ class RESTMethods {
|
|||||||
emoji: parseEmoji(emoji),
|
emoji: parseEmoji(emoji),
|
||||||
channel_id: channelID,
|
channel_id: channelID,
|
||||||
}).reaction);
|
}).reaction);
|
||||||
})
|
}, reject);
|
||||||
.catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -767,8 +719,7 @@ class RESTMethods {
|
|||||||
getMyApp() {
|
getMyApp() {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.rest.makeRequest('get', Constants.Endpoints.myApp, true)
|
this.rest.makeRequest('get', Constants.Endpoints.myApp, true)
|
||||||
.then(app => resolve(new ClientOAuth2App(this.rest.client, app)))
|
.then(app => resolve(new ClientOAuth2App(this.rest.client, app)), reject);
|
||||||
.catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -107,8 +107,7 @@ class VoiceConnection extends EventEmitter {
|
|||||||
speaking: true,
|
speaking: true,
|
||||||
delay: 0,
|
delay: 0,
|
||||||
},
|
},
|
||||||
})
|
}).catch(e => {
|
||||||
.catch(e => {
|
|
||||||
this.emit('debug', e);
|
this.emit('debug', e);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -156,8 +155,7 @@ class VoiceConnection extends EventEmitter {
|
|||||||
this.sockets.udp.findEndpointAddress()
|
this.sockets.udp.findEndpointAddress()
|
||||||
.then(address => {
|
.then(address => {
|
||||||
this.sockets.udp.createUDPSocket(address);
|
this.sockets.udp.createUDPSocket(address);
|
||||||
})
|
}, e => this.emit('error', e));
|
||||||
.catch(e => this.emit('error', e));
|
|
||||||
});
|
});
|
||||||
this.sockets.ws.once('sessionDescription', (mode, secret) => {
|
this.sockets.ws.once('sessionDescription', (mode, secret) => {
|
||||||
this.authentication.encryptionMode = mode;
|
this.authentication.encryptionMode = mode;
|
||||||
|
|||||||
@@ -136,7 +136,7 @@ class StreamDispatcher extends EventEmitter {
|
|||||||
const packet = this._createPacket(sequence, timestamp, this.player.opusEncoder.encode(buffer));
|
const packet = this._createPacket(sequence, timestamp, this.player.opusEncoder.encode(buffer));
|
||||||
while (repeats--) {
|
while (repeats--) {
|
||||||
this.player.voiceConnection.sockets.udp.send(packet)
|
this.player.voiceConnection.sockets.udp.send(packet)
|
||||||
.catch(e => this.emit('debug', `failed to send a packet ${e}`));
|
.catch(e => this.emit('debug', `Failed to send a packet ${e}`));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -264,7 +264,7 @@ class WebSocketManager extends EventEmitter {
|
|||||||
this.status = Constants.Status.NEARLY;
|
this.status = Constants.Status.NEARLY;
|
||||||
if (this.client.options.fetchAllMembers) {
|
if (this.client.options.fetchAllMembers) {
|
||||||
const promises = this.client.guilds.map(g => g.fetchMembers());
|
const promises = this.client.guilds.map(g => g.fetchMembers());
|
||||||
Promise.all(promises).then(() => this._emitReady()).catch(e => {
|
Promise.all(promises).then(() => this._emitReady(), e => {
|
||||||
this.client.emit(Constants.Events.WARN, 'Error in pre-ready guild member fetching');
|
this.client.emit(Constants.Events.WARN, 'Error in pre-ready guild member fetching');
|
||||||
this.client.emit(Constants.Events.ERROR, e);
|
this.client.emit(Constants.Events.ERROR, e);
|
||||||
this._emitReady();
|
this._emitReady();
|
||||||
|
|||||||
@@ -134,17 +134,19 @@ class Shard {
|
|||||||
if (message) {
|
if (message) {
|
||||||
// Shard is requesting a property fetch
|
// Shard is requesting a property fetch
|
||||||
if (message._sFetchProp) {
|
if (message._sFetchProp) {
|
||||||
this.manager.fetchClientValues(message._sFetchProp)
|
this.manager.fetchClientValues(message._sFetchProp).then(
|
||||||
.then(results => this.send({ _sFetchProp: message._sFetchProp, _result: results }))
|
results => this.send({ _sFetchProp: message._sFetchProp, _result: results }),
|
||||||
.catch(err => this.send({ _sFetchProp: message._sFetchProp, _error: makePlainError(err) }));
|
err => this.send({ _sFetchProp: message._sFetchProp, _error: makePlainError(err) })
|
||||||
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Shard is requesting an eval broadcast
|
// Shard is requesting an eval broadcast
|
||||||
if (message._sEval) {
|
if (message._sEval) {
|
||||||
this.manager.broadcastEval(message._sEval)
|
this.manager.broadcastEval(message._sEval).then(
|
||||||
.then(results => this.send({ _sEval: message._sEval, _result: results }))
|
results => this.send({ _sEval: message._sEval, _result: results }),
|
||||||
.catch(err => this.send({ _sEval: message._sEval, _error: makePlainError(err) }));
|
err => this.send({ _sEval: message._sEval, _error: makePlainError(err) })
|
||||||
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ class ShardingManager extends EventEmitter {
|
|||||||
fetchRecommendedShards(this.token).then(count => {
|
fetchRecommendedShards(this.token).then(count => {
|
||||||
this.totalShards = count;
|
this.totalShards = count;
|
||||||
resolve(this._spawn(count, delay));
|
resolve(this._spawn(count, delay));
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
} else {
|
} else {
|
||||||
if (typeof amount !== 'number' || isNaN(amount)) throw new TypeError('Amount of shards must be a number.');
|
if (typeof amount !== 'number' || isNaN(amount)) throw new TypeError('Amount of shards must be a number.');
|
||||||
if (amount < 1) throw new RangeError('Amount of shards must be at least 1.');
|
if (amount < 1) throw new RangeError('Amount of shards must be at least 1.');
|
||||||
|
|||||||
@@ -438,13 +438,15 @@ class Message {
|
|||||||
* .catch(console.error);
|
* .catch(console.error);
|
||||||
*/
|
*/
|
||||||
delete(timeout = 0) {
|
delete(timeout = 0) {
|
||||||
return new Promise((resolve, reject) => {
|
if (timeout <= 0) {
|
||||||
this.client.setTimeout(() => {
|
return this.client.rest.methods.deleteMessage(this);
|
||||||
this.client.rest.methods.deleteMessage(this)
|
} else {
|
||||||
.then(resolve)
|
return new Promise(resolve => {
|
||||||
.catch(reject);
|
this.client.setTimeout(() => {
|
||||||
}, timeout);
|
resolve(this.delete());
|
||||||
});
|
}, timeout);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -123,16 +123,15 @@ class MessageReaction {
|
|||||||
const message = this.message;
|
const message = this.message;
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
message.client.rest.methods.getMessageReactionUsers(message.channel.id, message.id, this.emoji.identifier, limit)
|
message.client.rest.methods.getMessageReactionUsers(message.channel.id, message.id, this.emoji.identifier, limit)
|
||||||
.then(users => {
|
.then(users => {
|
||||||
this.users = new Collection();
|
this.users = new Collection();
|
||||||
for (const rawUser of users) {
|
for (const rawUser of users) {
|
||||||
const user = this.message.client.dataManager.newUser(rawUser);
|
const user = this.message.client.dataManager.newUser(rawUser);
|
||||||
this.users.set(user.id, user);
|
this.users.set(user.id, user);
|
||||||
}
|
}
|
||||||
this.count = this.users.size;
|
this.count = this.users.size;
|
||||||
resolve(this.users);
|
resolve(this.users);
|
||||||
})
|
}, reject);
|
||||||
.catch(reject);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,10 +66,10 @@ class TextChannel extends GuildChannel {
|
|||||||
this.client.resolver.resolveFile(avatar).then(file => {
|
this.client.resolver.resolveFile(avatar).then(file => {
|
||||||
let base64 = new Buffer(file, 'binary').toString('base64');
|
let base64 = new Buffer(file, 'binary').toString('base64');
|
||||||
let dataURI = `data:;base64,${base64}`;
|
let dataURI = `data:;base64,${base64}`;
|
||||||
this.client.rest.methods.createWebhook(this, name, dataURI).then(resolve).catch(reject);
|
resolve(this.client.rest.methods.createWebhook(this, name, dataURI));
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
} else {
|
} else {
|
||||||
this.client.rest.methods.createWebhook(this, name).then(resolve).catch(reject);
|
resolve(this.client.rest.methods.createWebhook(this, name));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -145,11 +145,11 @@ class Webhook {
|
|||||||
}
|
}
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.client.resolver.resolveFile(attachment).then(file => {
|
this.client.resolver.resolveFile(attachment).then(file => {
|
||||||
this.client.rest.methods.sendWebhookMessage(this, content, options, {
|
resolve(this.client.rest.methods.sendWebhookMessage(this, content, options, {
|
||||||
file,
|
file,
|
||||||
name: fileName,
|
name: fileName,
|
||||||
}).then(resolve).catch(reject);
|
}));
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,14 +181,13 @@ class Webhook {
|
|||||||
if (avatar) {
|
if (avatar) {
|
||||||
this.client.resolver.resolveFile(avatar).then(file => {
|
this.client.resolver.resolveFile(avatar).then(file => {
|
||||||
const dataURI = this.client.resolver.resolveBase64(file);
|
const dataURI = this.client.resolver.resolveBase64(file);
|
||||||
this.client.rest.methods.editWebhook(this, name, dataURI)
|
resolve(this.client.rest.methods.editWebhook(this, name, dataURI));
|
||||||
.then(resolve).catch(reject);
|
}, reject);
|
||||||
}).catch(reject);
|
|
||||||
} else {
|
} else {
|
||||||
this.client.rest.methods.editWebhook(this, name)
|
this.client.rest.methods.editWebhook(this, name).then(data => {
|
||||||
.then(data => {
|
|
||||||
this.setup(data);
|
this.setup(data);
|
||||||
}).catch(reject);
|
resolve(this);
|
||||||
|
}, reject);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -97,8 +97,8 @@ class TextBasedChannel {
|
|||||||
this.client.rest.methods.sendMessage(this, content, options, {
|
this.client.rest.methods.sendMessage(this, content, options, {
|
||||||
file,
|
file,
|
||||||
name: fileName,
|
name: fileName,
|
||||||
}).then(resolve).catch(reject);
|
}).then(resolve, reject);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,7 +138,7 @@ class TextBasedChannel {
|
|||||||
|
|
||||||
this._cacheMessage(msg);
|
this._cacheMessage(msg);
|
||||||
resolve(msg);
|
resolve(msg);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -172,7 +172,7 @@ class TextBasedChannel {
|
|||||||
this._cacheMessage(msg);
|
this._cacheMessage(msg);
|
||||||
}
|
}
|
||||||
resolve(messages);
|
resolve(messages);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,7 +190,7 @@ class TextBasedChannel {
|
|||||||
this._cacheMessage(msg);
|
this._cacheMessage(msg);
|
||||||
}
|
}
|
||||||
resolve(messages);
|
resolve(messages);
|
||||||
}).catch(reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user