Создание черного списка юзеров

FAQBILL

Client
Регистрация
28.09.2013
Сообщения
46
Благодарностей
29
Баллы
18
Здравствуйте ребята. Наверное уже наверное много спрашивали что то подобное, потому что в поиске нахожу, но разобраться не могу, новичок я пока с работой такой замечательной программы.

Мне надо сделать рассылку в личные сообщения юзерам.
Все юзеры которые онлайн у меня периодически парсятся и складываются в текстовый документ. Рассылка так же по этим спарсенным юзерам делается отлично.
У меня вопрос, как мне отсеять тех пользователей, которым я уже отослал сообщения, что бы не повторятся и по два раза не отсылать им.
Я логику примерно понимаю, что строка с ссылкой на профиль которому отправлено сообщения должна перемещаться в другой текстовый файл, затем проверятся в первом файле.

Одним словом как сделать что бы повторно не отсылать одно и тоже сообщения по два раза одному и тому пользователю.

Может есть у кого то кусочек этого кода ? Огромная просьба к вам, не отказать в помощи.
Спасибо.
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 270
Благодарностей
9 054
Баллы
113
Здравствуйте ребята. Наверное уже наверное много спрашивали что то подобное, потому что в поиске нахожу, но разобраться не могу, новичок я пока с работой такой замечательной программы.

Мне надо сделать рассылку в личные сообщения юзерам.
Все юзеры которые онлайн у меня периодически парсятся и складываются в текстовый документ. Рассылка так же по этим спарсенным юзерам делается отлично.
У меня вопрос, как мне отсеять тех пользователей, которым я уже отослал сообщения, что бы не повторятся и по два раза не отсылать им.
Я логику примерно понимаю, что строка с ссылкой на профиль которому отправлено сообщения должна перемещаться в другой текстовый файл, затем проверятся в первом файле.

Одним словом как сделать что бы повторно не отсылать одно и тоже сообщения по два раза одному и тому пользователю.

Может есть у кого то кусочек этого кода ? Огромная просьба к вам, не отказать в помощи.
Спасибо.
Много раз обсуждали на форуме, вот навскидку нашлось:
https://zennolab.com/discussion/threads/kak-sozdat-blacklist.13577/
https://zennolab.com/discussion/threads/realizacija-chjornogo-spiska.14799/
https://zennolab.com/discussion/threads/chernyj-spisok.37072/
 
  • Спасибо
Реакции: kagorec и FAQBILL

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 427
Благодарностей
5 453
Баллы
113
Я лично использую данный метод.

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

FAQBILL

Client
Регистрация
28.09.2013
Сообщения
46
Благодарностей
29
Баллы
18
Ребята, извините, надоел я уже наверное вам со своим вопросом, ничего у меня не получается.

- У меня в проекте есть один список USER который постоянно пополняется
- Из него берется URL юзера и отправляется сообщение и так далее каждому юзеру

Создал еще один список BlackList
Не могу понять хоть тресни, перечитал уже все что можно, ну не доходит ко мне ребята.

Как перенести URL юзера из списка USER в список BlackList , а потом проверить список USER нету ли ссылки уже из списка BlackList ?
Если есть, ее просто удалить и повторно не отправлять ничего.

Спасибо за понимание
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 427
Благодарностей
5 453
Баллы
113
Логика блеклиста.

Ты берешь ссылку юзера и проверяешь на наличие в блеклисте. Если есть берешь новую, если нет, то отправляешь сообщение и после удачной отправки записываешь строку в блеклист.
 
  • Спасибо
Реакции: FAQBILL

FAQBILL

Client
Регистрация
28.09.2013
Сообщения
46
Благодарностей
29
Баллы
18
Логика блеклиста.

Ты берешь ссылку юзера и проверяешь на наличие в блеклисте. Если есть берешь новую, если нет, то отправляешь сообщение и после удачной отправки записываешь строку в блеклист.
Спасибо Вам за ответ. Да логику я понимаю, но как это сделать, ума к сожалению не хватает.
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 427
Благодарностей
5 453
Баллы
113
  • Спасибо
Реакции: FAQBILL

Zhekaz

Client
Регистрация
14.03.2016
Сообщения
106
Благодарностей
55
Баллы
28
Я давно таким кодом пользуюсь
Код:
string nameRegexp = project.Variables["User"].Value; // NAME - название зенно переменной
IZennoList Names = project.Lists["BlackList"];
Regex re = new Regex(nameRegexp, RegexOptions.IgnoreCase);
return Names.Any(item => re.IsMatch(item));
Взяли ид/логин пользователя из списка USER в переменную user и сравнили со списком BlackList. Ложим результат в переменную, 2 варианта true - есть в списке BlackList, false - нету.
 

kagorec

Client
Регистрация
24.08.2013
Сообщения
978
Благодарностей
521
Баллы
93
За основу идея черного списка
Код:
// берем из переменной текст, который надо искать
var textContains = project.Variables["listSearchTextContains"].Value;
// получаем список, в котором будем искать
var sourceList = project.Lists["SourceList"];
// ищем в каждой строчке в списке
lock(SyncObjects.ListSyncer)
{
    for(int i=0; i < sourceList.Count; i++)
    {
        // читаем строку из списка
        var str = sourceList[i];
        // проверяем содержание текста в строке, если есть совпадение возвращаем "yes"
        if (str.Contains(textContains))
            return "yes";
    }
}
// если ничего не нашли возвращаем "no"
return "no";
После оптимизации через Claude
C#:
var textContains = project.Variables["listSearchTextContains"].Value;
var sourceList = project.Lists["SourceList"];

lock (SyncObjects.ListSyncer)
{
    return sourceList.AsParallel()
        .Any(str => str.IndexOf(textContains, StringComparison.Ordinal) >= 0)
        ? "yes"
        : "no";
}
  • Использование AsParallel(): Это позволяет распараллелить поиск на несколько потоков, что значительно ускорит обработку больших списков.
  • Замена Contains на IndexOf: Метод IndexOf с указанием StringComparison.Ordinal работает быстрее, чем Contains, особенно для больших строк.
  • Использование Any вместо цикла for: Метод Any прекращает выполнение, как только находит совпадение, что эквивалентно return "yes" в оригинальном коде, но в более лаконичной форме.
  • Убрана переменная str: Теперь мы используем лямбда-выражение напрямую в методе Any, что немного уменьшает использование памяти.
  • Сохранение блокировки lock: Блокировка сохранена для обеспечения потокобезопасности при работе со списком.

Эти изменения должны значительно улучшить производительность кода при работе с большими списками. Параллельная обработка особенно эффективна для списков с более чем 100000 элементов.

© Claude
 
Последнее редактирование:

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)