Как сделать таймер в discord js

Я’пытаюсь сделать команду репутации с моим ботом, но я хочу, чтобы она была на 24-часовом таймере, чтобы они могли давать репутацию только один раз в день. В первый блок они просматривают только свою репутацию, а если они упоминают пользователя, то это дает упомянутому пользователю очко репутации. Я не понимаю, как сделать таймер.

const Discord = require(«discord.js»); const fs = require(«fs»); const ms = require(«ms»); let reputation = JSON.parse(fs.readFileSync(«./saves/reputation.json», «utf8»)); module.exports.run = async(bot, message, args) => < console.log(`$ran the «reputation» command`); //— Timer on last use let repTimer = 8640000 //— Getting username let repUser = message.guild.member(message.mentions.users.first() || message.guild.members.get(args[0])); //— Only displaying your points —\ if (!repUser) < if (!reputation[message.author.id]) < reputation[message.author.id] = < reputation: 0 >; > let repPoints = reputation[message.author.id].reputation; let repEmbed = new Discord.RichEmbed() .setAuthor(message.author.username) .setColor(«#00FF00») .setDescription(`Reputation Points: $`); message.channel.send(repEmbed); > //— End !repUser else < if (!reputation[repUser.id]) < reputation[repUser.id] = < reputation: 0 >; > //— If user was mentioned —\ let numRep = reputation[repUser.id].reputation; reputation[repUser.id] = < reputation: numRep + 1 >; message.channel.send(`$ has given $ a reputation point`); > //— Needed (Also Wth Error Message) —\ fs.writeFile(«./saves/reputation.json», JSON.stringify(reputation), (err) => < if (err) console.log(err) >); > module.exports.help =

0 2019-01-18T01:00:22+00:00 1

Дискорд бот который удивил всех! Не обычный бот GloNaS. И как сделать таймер в профиль! Discord

Источник: kzen.dev

Как отправлять сообщения по таймеру в Discord боте JS?

У меня есть бот, который уведомляет об определенных событиях и оставшемся до их начала времени. Вызывается проверка командой в чат (!events). Мне нужно, чтобы он сам присылал уведомление за 15 минут до начала события, не завися от команды.

  • Вопрос задан более двух лет назад
  • 930 просмотров

Комментировать
Решения вопроса 1

E1ON

Programming, Gamedev, VR
Ну так зюазай node-cron, проверяй раз в некоторое время все эвенты
Ответ написан более двух лет назад
А куда именно вставить фрагмент с его кодом? Дублировать время начала ивентов в bot.js?

Еще по теме:  Legacy of discord как получить благословение алисы

Alexandre888

V3iT, было бы неплохо увидеть код

const Discord = require(‘discord.js’); // Подключаем библиотеку discord.js const robot = new Discord.Client(); // Объявляем, что robot — бот const comms = require(«./comms.js»); // Подключаем файл с командами для бота const fs = require(‘fs’); // Подключаем родной модуль файловой системы node.js let config = require(‘./config.json’); // Подключаем файл с параметрами и информацией let token = config.token; // «Вытаскиваем» из него токен let prefix = config.prefix; // «Вытаскиваем» из него префикс robot.on(«ready», function()< /* Бот при запуске должен отправить в терминал сообщение «[Имя бота] запустился!» */ console.log(robot.user.username + » запустился!»); >); robot.on(‘message’, (msg) => < // Реагирование на сообщения if(msg.author.username != robot.user.username msg.author.discriminator != robot.user.discriminator)< var comm = msg.content.trim()+» «; var ok = false; var comm_name = comm.slice(0, comm.indexOf(» «)); var messArr = comm.split(» «); for(comm_count in comms.comms)< var comm2 = prefix + comms.comms[comm_count].name; if(comm2 == comm_name)< comms.comms[comm_count].out(robot, msg, messArr); >> > >); robot.login(token); // Авторизация бота
const config = require(‘./config.json’); const Discord = require(‘discord.js’); const moment = require(‘moment’); const prefix = config.prefix; const versions = config.versions; function events(robot, mess, args) < var mytime = new Date(); var testEvent = new Date(); testEvent.setHours(12,0,0); if(mytime < testEvent) < var sec = (testEvent — mytime)/1000; var min = sec / 60; var hour = min / 60; var day = //’Дней: ‘ + Math.floor(hour / 24) + Math.floor(hour % 24)+’ ч. ‘ + Math.floor(min % 60)+’ мин. ‘ + Math.floor(sec % 60)+’ сек.’; mess.channel.send(«До события осталось » +day); >var comms_list = [ ]

Просто у меня таких событий несколько, со временем их нужно будет менять, не хотелось бы дублировать одно и то же в оба файла, можно где-то забыть исправить

HOW TO MAKE DISCORD BOT | ALARM / TIMER COMMAND | #8

Alexandre888

V3iT, ну, к примеру, соорудите что-то наподобие этого:

if (+day === 15)

Александр, это понятно, нужно чтобы он сам определял, когда осталось 15 минут и отправлял в чат уведомление без вызова командой

Alexandre888

V3iT, можете попробовать добавить ваш код в bot.js, завернув его в robot.on message:

Еще по теме:  Как удалить канал в дискорд на телефоне

robot.on(‘message’, message => < // . . . // >);

это скорее всего лучшее решение вашей проблемы в данный момент.

что-бы бот выполнял код, вы должны дать ему направление: или он будет его выполнять, при обнаружении сообщения; или при начале работы и т.д
просто так он сделать ничего не сможет.

Александр, нужна функция ежеминутной проверки времени, чтобы бот сравнивал текущее с запланированным, и если совпало — выдал уведомление. Мне пока трудновато дается работа со временем и датой в JS, если не сложно, набросайте готовый фрагмент кода

Alexandre888

V3iT, ну, если прям набросать, то:

for (var step = 0; step < условие; step++) < if (текущее время === запланированное время) < message.channel.send(«уведомление») >>

дальше сами.
Увы, не работает. Думаю, нужно все же через cron сделать

Alexandre888

V3iT, ну так код ошибки приложите.
если не работает, это не значит, что нужно использовать другой метод.
и вообще, при чём здесь cron? это обычный цикл, на чистом джаваскрипте: он выполняет какое-либо действие, пока условие вычисляется в true.
если вам нужно именно повторение действия, с промежутком в x времени, то конечно, лучше не извращаться и использовать cron.

Александр, у меня события цикличные, каждую неделю повторяются. Некоторые повторяются только в выходные. Время не меняется. Нужно просто заставить бота независимо ни от чего, без всяких вызовов командой или мониторинга сообщений проявить инициативу и прислать уведомление с напоминанием.
По Вашему совету написал код в bot.js

robot.on(‘message’, message => < var mytime = new Date(); var alert1 = new Date(); var alert2 = new Date(); alert1.setHours(11,45,0); alert2.setHours(19,45,0); if(mytime === alert1) message.channel.send(«До события №1 осталось 15 минут»); if(mytime === alert2) message.channel.send(«До события №2 осталось 15 минут»); >);

Но увы, не работает.

Alexandre888

V3iT, послушайте, ваш код не сможет работать «без вызова всяких команд, без мониторинга сообщений».
код в боте всегда, абсолютно всегда, должен от чего-либо зависеть: от старта бота, от обнаружения сообщений, от обнаружения нового пользователя на сервере — от чего угодно.
код не может работать просто так — его нужно направить в какое-нибудь русло.
максимум, что вы можете сделать — подключить БД/.json файл, написать команду enable с условием:

Еще по теме:  Как выглядит подарок дискорд нитро

условие на случай использования .json-файла

если команда введена, в .json файл вписывается что-нибудь по типу
если number_of_uses >= 1 — запустить бесконечную работу фрагмента кода и повторять до выключения бота.

условие на случай использования БД

если команда введена, отправить запрос по типу INSERT INTO . . ., если значение обнаружено — запустить бесконечную работу фрагмента кода и повторять до выключения бота.

Александр, эх, ну ладно, спасибо за помощь.
У меня тут еще одна проблема, на этот раз со временем. Бот хостится на моем ПК, приходится отнимать час от своего времени, чтоб получить нужное. Но в момент смены дня он ломается на этот самый час, т.к. меняется дата. Подскажите, как это обойти.

Вот мой код для изменения локального времени

var mytime = new Date(); var correction = mytime.setHours(mytime.getHours() — 1); var servertime = new Date(correction);

Alexandre888

V3iT, не совсем понял, чего вы хотите добиться.
поконкретней формулировки, пожалуйста.

Александр, мой часовой пояс отличается от мск на +1, приходится в боте отнимать от своего времени час, чтобы он выдавал корректные данные. Можно ли ему как-то изначально задать часовой пояс, чтобы не зависел от локального?

Alexandre888

V3iT, да, разумеется
к примеру:

new Date(Date.UTC(year, month, day, hour, minute, second));

Источник: qna.habr.com

discord.js Как менять статус бота каждые 5 сек

Хочу чтобы менялся статус бота с интервалом в 5 секунд то есть, сначала, смотрит, потом играет, потом слушает.

Пытался сделать что-то по типу этого. Не получилось. Вот пример снизу!

setInterval(()=> < >)>; >, 2500) > );

Ответы (1 шт):

var i = 0; var timer = bot.setInterval(function () < var gamePresence = [«Статус», «Статус»];//каждое слово через запятую — отдельный статус bot.user.setPresence(< game: < name: gamePresence[i%gamePresence.length], type: 1, url: «https://www.twitch.tv/akkulalife» >>); i++; >,5000)//время

Источник: husl.ru

Рейтинг
( Пока оценок нет )
Загрузка ...