проверить, сообщение было отправлено в текстовый канал или в ЛС боту: message.channel.type === "dm";
выдать роль:
let role = client.guilds.cache.get("id_сервера")
.roles.cache.find /* или .get() */ (// условие //)
client.guilds.cache.get("id_сервера")
.members.cache.get(message.author.id)
.roles.add(role)
let role = client.guilds.cache.get("815595205733515274").roles.cache.find.get(promoObject[msg[1]]["Role_ID"])
client.guilds.cache.get("815595205733515274")
.members.cache.get(message.author.id)
.roles.add(role)
Выдаёт ошибку TypeError: client.guilds.cache.get(...).roles.cache.find.get is not a function
У меня есть Id роли изначально
Пробовал подставить Id роли сразу во вторую строчку, но безуспешно
.roles.add(promoObject[msg[1]]["Role_ID"])
TypeError: Cannot read property 'roles' of undefined
qwikman1, можно поинтересоваться, а что это такое? .cache.find.get()
в ответе я указал, что можно использовать и .find(), и .get() .get() используется в случае, если вам нужно получить что-либо, по его ID. .find() используется, если вам нужно получить что-либо по условию, например: .find(user => user.username === "Alex")
Спасибо что объяснили)
Сделал так, но снова ошибка
let role = client.guilds.cache.get("815595205733515274").roles.cache.get(promoObject[msg[1]]["Role_ID"])
client.guilds.cache.get("815595205733515274")
.members.cache.get(message.author.id)
.roles.add(role)
.roles.add(role)
^
TypeError: Cannot read property 'roles' of undefined
qwikman1, код рабочий, указываете неправильные значения.
проверьте, точно ли promoObject[msg[1]]["Role_ID"] является строкой и идентификатором роли.
проверьте ID сервера на правильность.
если всё проверили и ошибок быть не может - приложите весь код.
const Discord = require('discord.js');
const random = require('random');
const fs = require('fs').promises
let {token} = require('./config.json');
var EmSet = require('./Setting/setEm.json')
const client = new Discord.Client({disableEveryone: false});
let {Chan_Set} = require('./config.json');
let {Chat_Activate} = require('./config.json');
let {Guild} = require('./config.json');
let {Promo_Ch} = require('./config.json');
client.on('message', async message => {
if ((message.content.startsWith("!pc")) & ((message.channel.type === "dm"))) {
let promo = await fs.readFile('promo.json', 'utf8');
let promoObject = JSON.parse(promo);
let xpFile = await fs.readFile('userxp.json', 'utf8');
let xpObject = JSON.parse(xpFile);
let Tmsg = message.content.replace(/\s+/g, ' ').trim()
let msg = Tmsg.split(" ")
let Checker = false
if (promoObject.hasOwnProperty(msg[1])) {
let date = Date()
if ((promoObject[msg[1]]["Type"] == "Role") & (Date.parse(date) < promoObject[msg[1]]["To_Time"]) & (!Checker)) {
//message.guild.members.cache.get(message.author.id).roles.add(promoObject[msg[1]]["Role_ID"]);
let role = client.guilds.cache.get("815595205733515274").roles.cache.get("815975903427035208")
client.guilds.cache.get("815595205733515274")
.members.cache.get(message.author.id)
.roles.add(role)
message.channel.send("Всё прошло успешно, с обновлением :3")
if (promoObject[msg[1]]["activation"] > 0) {
promoObject[msg[1]]["activation"] -= 1;
} else promoObject[msg[1]] = null
Checker = true
} //else message.channel.send("Недествительный промокод")
if (promoObject.hasOwnProperty(msg[1]))
if ((promoObject[msg[1]]["Type"] == "ExCode") & (Date.parse(date) < promoObject[msg[1]]["To_Time"]) & (!Checker)) {
xpObject[message.author.id][Guild]["userXP"] += xpFile[msg[1]["Ex_Add"]]
message.channel.send("Всё прошло успешно, с обновлением :3")
if (promoObject[msg[1]]["activation"] > 0) {
promoObject[msg[1]]["activation"] -= 1;
} else promoObject[msg[1]] = null
Checker = true
} //else message.channel.send("Недествительный промокод")
} else message.channel.send("Недествительный промокод")
await fs.writeFile('userxp.json', JSON.stringify(xpObject, null, 4),
'utf8').catch(err => console.log(err))
await fs.writeFile('promo.json', JSON.stringify(promoObject, null, 4),
'utf8').catch(err => console.log(err))
}
}
Попробовал напрямую вписать строку роли и гильдии, но по прежнему ошибка
.roles.add(role)
^
TypeError: Cannot read property 'roles' of undefined
Есть ещё код, но он не имеет отношение к данной функции(если нужно могу скинуть)
qwikman1, перейдите в Discord Developer Portal, выберите профиль вашего бота, перейдите во вкладку Bot, пролистайте ниже до "Privileged Gateway Intents".
если напротив пункта SERVER MEMBERS INTENT ползунок находится в выключенном положении - включите его и протестируйте код ещё раз.