myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
 
Ответить в данную темуНачать новую тему

> Определение профиля получателя сообщения

Теги
Нет тегов для показа
Damaks
сообщение 16.8.2010, 14:56
Сообщение #1


Освоившийся участник
*****

Группа: Пользователи
Сообщений: 260
Регистрация: 1.6.2010
Пользователь №: 6 968
Спасибо сказали: 83 раза




Хотел улучшить свой Скрипт антирекламы.

Задумка была следующая. При отсылки сообщения админу хаба сообщение оно не должно было фильтроваться. Профили, которым можно безбоязненно писать, должны были браться из таблицы:

Код
local tProfiles = {      -- Профили пользователей, которым разрешена реклама  (0 - нет; 1 - да)
   [0] = 1,      -- Мастер
   [1] = 1,      -- Оператор
   [2] = 1,      -- VIP
   [3] = 0,      -- Зарегистрированный пользователь
  [-1] = 0,      -- Незарегистрированный пользователь
}

То есть проверить соответствие профиля получателя сообщения одной из групп, здесь 1.
Пытался использовать в роли получателя "to" из:

Код
local s,e,to,from,sNick,message = string.find(data, "%$To:%s(%S+)%sFrom:%s(%S+)%s$<(%S+)%>%s(.*)$")

Но результата не добился. Может, использовал не те функции. Максимум, что получилось, - это вручную задать порядковые номера "избранных" в операторе "if", в этом примере 0,1,2. Но это очень неудобно, т.к. каждому нужно редактировать внутри кода, в зависимости от профилей и разрешений. Нужно сделать, чтобы получатель проверялся по таблице tProfiles. Так и не смог связать "to" и "tProfiles" в рабочую конструкцию. Пробовал полазить по другим скриптам, но тоже не нашёл. Вот тут я и завис, как это реализовать не знаю.

Должна же быть какая-то конструкция, чтобы воплотить эту задумку в реальность. Причём универсальная, чтобы работала и в модифицированном скрипте, вроде:

Код
local tProfiles = {
   [0] = 1,      -- Мастер
   [1] = 1,      -- Оператор
   [2] = 2,      -- VIP
   [3] = 2,      -- Зарегистрированный пользователь
  [-1] = 0,      -- Незарегистрированный пользователь
}


Go to the top of the page
+Quote Post
Setuper
сообщение 16.8.2010, 15:20
Сообщение #2


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Код
local tToUser = Core.GetUser(to)
if tToUser then
  local iProfile = tProfiles[tToUser.iProfile]
  if iProfile and iProfile == 1 then
    ...
  end
end


Спасибо сказали:
Go to the top of the page
+Quote Post
Ksan
сообщение 16.8.2010, 15:58
Сообщение #3


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 723
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 657 раз




Цитата
Но результата не добился.
- можно это поподробнее? В чём это выражалось?
Если ты не смог выцепить To, From - одно дело, если ты не смог их использовать удачно - другое...Уточни. А то совет Сетапера может пойти насмарку при первом варианте неудачи, что я описал..
Go to the top of the page
+Quote Post
Setuper
сообщение 16.8.2010, 17:02
Сообщение #4


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Он же написал строку, которая даёт to и from.
Достаточно применить код, написанный мною, вместе с написанной строкой.
Go to the top of the page
+Quote Post
Ksan
сообщение 16.8.2010, 17:37
Сообщение #5


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 723
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 657 раз




Он написал код, но он не написал, работает код или нет...он вообще не писал, где и какая проблема у него.
Go to the top of the page
+Quote Post
Damaks
сообщение 16.8.2010, 19:31
Сообщение #6


Освоившийся участник
*****

Группа: Пользователи
Сообщений: 260
Регистрация: 1.6.2010
Пользователь №: 6 968
Спасибо сказали: 83 раза




Спасибо, получилось, проверял как мог, ошибок не обнаружил.
Дело было в том, что я не вводил локальную переменную, а пытался выкрутиться через tProfiles[to.iProfile]. А до этого ещё function get_profile_id(username).
В результате получилось так (из упрощённого варианта скрипта для тестов):

Код
function ToArrival(user,data)
    local message = data:match('%b<>%s*(.+)|$')
    local s,e,to,from,sNick,message = string.find(data, "%$To:%s(%S+)%sFrom:%s(%S+)%s$<(%S+)%>%s(.*)$")
    local tToUser = Core.GetUser(to)
    if tToUser and message and tProfiles[user.iProfile]==0 and tProfiles[tToUser.iProfile]==0 then
        if is_forbidden(message, forbidden_patterns, allowed_patterns) then
            Core.SendToAll(botmyinfo)
            Core.SendPmToUser(user, sBot," *** "..block_message[1])
        return true
        end
    end
return false
end


Если позволите, ещё два небольших вопроса.
1) Для быстродействия что предпочтительнее, один оператор IF с несколькими AND (как в примере сверху) или лучше будет разделить его на отдельные вложенные операторы IF? Думал, что разницы нет, кроме экономии места, но хотелось бы услышать от людей более сведущих.
2) Описание бота, посылаемое при подключении, сбрасывалось при срабатывании скрипта или обновления списка пользователей. Поэтому пришлось после каждого заблокированного сообщения посылать инфу всем пользователям (Core.SendToAll(botmyinfo)). Но мне эта функция не очень нравится, не рационально каждый раз отсылать всем, хоть и не часто бывает. Есть ли более простая альтернатива?

Спасибо.
Причина редактирования: ай ай ай просмотр чужих личных сообщений!
Go to the top of the page
+Quote Post
Setuper
сообщение 16.8.2010, 19:45
Сообщение #7


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




1) Действительно, разницы для интерпретатора нету, однако лишние нагромождения if-ами ухудшает читаемость кода, поэтому, если возможно, то лучше написать один if.
2) В птохе такой альтернативы нету.
Go to the top of the page
+Quote Post
Damaks
сообщение 16.8.2010, 20:46
Сообщение #8


Освоившийся участник
*****

Группа: Пользователи
Сообщений: 260
Регистрация: 1.6.2010
Пользователь №: 6 968
Спасибо сказали: 83 раза




Спасибо за помощь, скрипты перезалил: Скрипт антирекламы для PtokaX
Go to the top of the page
+Quote Post

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
No New Posts Определение использования прокси
Различные варианты определения прокси
11 Enyby 16 327 22.2.2013, 12:17 Посл. сообщение: Enyby
No New Posts Как получить сообщения из чата
6 Radzhab 10 543 13.9.2012, 23:01 Посл. сообщение: mariner
Closed Ребята скинте мне скрипт котри может отправит сообщения все от любого ника Плизз
Ребята скинте мне скрипт котри может отправит сообщения все от любого
2 Davrik 5 929 15.11.2011, 8:35 Посл. сообщение: Accelerator
No New Posts Определение подсети по ip
2 LEXSOR 7 800 6.8.2011, 9:03 Посл. сообщение: Alexey
No new Topic has attachmentsОтправка сообщения в ПМ, в зависиммости от IP
14 MaxFox 14 618 21.4.2011, 19:48 Посл. сообщение: MaxFox
No New Posts Теряются сообщения. Не пойму.
помогите
1 djlab 6 315 10.1.2011, 10:34 Посл. сообщение: Vizunchik
No New Posts Скрипт отсылки сообщения в ЛС
ХЕЛП незнаю где ощибка!!!
1 Drakula 5 843 31.10.2010, 14:04 Посл. сообщение: Damaks
No New Posts Topic has attachmentsЗапрет пустого сообщения
API 2
4 WINS 7 827 20.7.2010, 15:20 Посл. сообщение: WINS
No New Posts Topic has attachmentsотсылка сообщения при подключении только локальному диапозону
1 Saymon21 6 113 25.1.2010, 18:35 Посл. сообщение: Артём
No New Posts Topic has attachmentsСообщения дня
9 knuckles 11 921 13.1.2010, 23:32 Посл. сообщение: random name
Closed Скрипт смены профиля по достижению определенной шары
1 KRAVA 5 949 3.1.2010, 13:34 Посл. сообщение: Wariner
No new Topic has attachmentsот:Как по команде сделать показ сообщения
консультация
19 Uncle_Dif 20 418 15.12.2009, 11:47 Посл. сообщение: Uncle_Dif
No New Posts Сообщения
3 Goblin 7 188 6.8.2009, 12:06 Посл. сообщение: Setuper
No New Posts Topic has attachmentsСообщения операторам
API 2
2 Strannik 6 291 29.6.2009, 23:44 Посл. сообщение: Strannik
Closed Как Работают Приват Сообщения
Как работают приват сообщения
2 pick 6 605 12.1.2009, 20:57 Посл. сообщение: Setuper

 



RSS Сейчас: 28.5.2024, 14:30