169 похожих чатов

Есть бот для VK, его могу добавить в беседу и

он должен отслеживать: Если пользователь не писал более N - времени (Указывается в настройках бота), то пользователя кикает и отправляет уведомление в беседу администраторов. Если же он успел опять написать сообщение, то - ничего. Проблема в следующем - я не знаю, где и как хранить эти данные. Предлагали приоритетную очередь, но не подходит под задачу, т.к нужны только уникальные элементы, то есть, если есть уже объект (время кика, время последнего сообщения, id чата, id пользователя), то нужно обновлять, а проходиться по каждому элементу - долго и дорого. Может быть кто-то подскажет, как правильно и с наименьшими затратами по времени это реализовать? Если можно, то с примерами) Спасибо.

2 ответов

18 просмотров

В редисе можно хранить ключом ид юзера, а значением — время последнего сообщения в FIFO очереди Человек написал — кидаешь в начало, каждую секунду, например, проходишь с конца, где лежат те, кто писал давнее всего, и кикаешь нужных

ZDev-🇷🇺 Автор вопроса
Очень полезный Юджин
В редисе можно хранить ключом ид юзера, а значение...

Можно пример реализации? А то с redis не работал. И что такое FIFO?

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта