@nemolayn
Создатель бота Nemo

Написал интервалы для проверки на мут и бан, не правильно работает?

Написал интервалы, на постоянку выдают что нашли баны у людей на это время. Но а сами не убирают баны, + там нету вообще ни у кого ни мутов ни банов.
Вот интервалы:
1:
setInterval(() => {
	// Ищем людей с мутом
	let mutedChatUsers = mongo.models.chatsusers.find({ muted: String(true) });
    // Проверяем есть вообще люди с мутом
	if(!mutedChatUsers) return console.log(`Nothing`)
    // Получаем дату 
	let now = getCurrentTime()
    // Ищем людей у которых время бана сравняется с текущим временем
	mutedChatUsers.find({ muted: true, mutedTime: now }).then((resM) => {
	// Если их нету
	if(!resM) return console.log(`Nothing`)
	// Если есть
	console.log(`Founded muted ${now}`)
	mongo.models.chatsusers.updateMany({ muted: true, mutedTime: now }, { $set: { muted: false, mutedTime: "None", mutedReason: "None" } })
	}).catch((err) => {
		console.log(err)
	});
}, 10000);

2:
setInterval(() => {
	// Ищем людей с баном и мутом
	let bannedChatUsers = mongo.models.chatsusers.find({ banned: String(true) });
    // Проверяем есть вообще люди с баном
	if(!bannedChatUsers) console.log(`Nothing`)
    // Получаем дату 
	let now = getCurrentTime()
    // Ищем людей у которых время бана сравняется с текущим временем
	bannedChatUsers.find({ banned: true, mutedTime: now }).then((resM) => {
	// Если их нету
	if(!resM) return console.log(`Nothing`)
	// Если есть
	console.log(`Founded banned`)
	mongo.models.chatsusers.updateMany({ banned: true, bannedTime: now }, { $set: { banned: false, bannedTime: "None", bannedReason: "None" } })
	}).catch((err) => {
		console.log(err)
	});
}, 10000);

Вот код функции getCurrentTime():
function getCurrentTime() {
	const now = new Date();
	
	const day = String(now.getDate()).padStart(2, '0');
	const month = String(now.getMonth() + 1).padStart(2, '0');
	const year = now.getFullYear();
	
	const hours = String(now.getHours()).padStart(2, '0');
	const minutes = String(now.getMinutes()).padStart(2, '0');
	
	const formattedTime = `${day}.${month}.${year} ${hours}:${minutes}`;
	
	return formattedTime;
}

Структура модуля базы данных chatsusers:
mongoose.model("chatusers", {
        rank: Number,
        warns: Number,
        name: String,
        banned: Number,
        vkid: String,
        muted: String,
        mutedReason: String,
        mutedTime: String,
        banned: String,
        bannedReason: String,
        bannedTime: String,
        new: String,
        join_date: String,
        join_time: String,
        join_chat: Number,
    })
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
zdev-online
@zdev-online
Backend Node.JS Developer
Проверяй на наличие мута либо через Cron, либо непосредственно при поступлении от пользователя сообщения и только тогда проверяй, и если нужно снимай его.

vk.updates.on('message_new', async (ctx, next) => {
	if (!ctx.isChat) return await next();

	await mongo.models.chatsusers.findOneAndUpdate(
		{
			muted: true,
			mutedTime: { $lte: now },
			vkId: ctx.senderId,
			join_chat: ctx.chatId,
		},
		{
			muted: false,
			mutedTime: 'None',
			mutedReason: 'None',
		},
	);

	await mongo.models.chatsusers.findOneAndUpdate(
		{
			banned: true,
			bannedTime: { $lte: now },
			vkId: ctx.senderId,
			join_chat: ctx.chatId,
		},
		{
			banned: false,
			bannedTime: 'None',
			bannedReason: 'None',
		},
	);
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Azperin
Дилетант
https://mongoosejs.com/docs/schematypes.html
Я без понятия как работает мангус, но думаю время в поиске стоит задавать хоть каким то интервалом
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы