myDC.ru

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

 
53 страниц V  « < 6 7 8 9 10 > »   
Ответить в данную темуНачать новую тему

> Вопросы Разработчикам Скриптов, вопросы по скриптам (мелкие вопросы)

district
сообщение 22.11.2008, 17:08
Сообщение #141


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




Да.. "как-то так". Но ведь не будешь на все возможные сочетания символов свои захваты городить? Поэтому в примере и используются (%S) - работает, ты ж сам видел. Но вот с окончанием захвата (а может, и с началом?) - проблема.
Go to the top of the page
+Quote Post
Sephiroth_Lukaw
сообщение 22.11.2008, 17:22
Сообщение #142


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

Группа: Пользователи
Сообщений: 307
Регистрация: 11.7.2008
Пользователь №: 173
Спасибо сказали: 31 раз




Цитата("district")
Задача - определить наличие в нике четырех и более одинаковых символов подряд.
Код
...
local _,_,Test=string.find("AAAzzzzddd", "(.)%1%1%1")
    if not Test then
    SendToAll("Нету") //Ну и ладно..
    else
    SendToAll("Есть - " . Test) //4 одинаковых символа, тут дисконнект юзера, бан, etc.
    end
...
Go to the top of the page
+Quote Post
Setuper
сообщение 22.11.2008, 18:29
Сообщение #143


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

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




хм... странно... а тэги этих самых юзеров можешь написать сюда? Надо разобраться из-за чего не происходит захвата.

по поводу повторений в нике думаю, что можно сделать так:
Код
function CheckRepeat(sStr)
  local sNewChar,sOldChar,iC,iRepeat="","",1,4
  for i=1,sStr:len() do
    sNewChar=sStr:sub(i,i)
    if sNewChar==sOldChar then
      iC=iC+1
    else
      iC=1
    end
    if iC>=iRepeat then
      return true
    end
    sOldChar=sNewChar
  end
end

function CheckNick(tUser)
  if CheckRepeat(tUser.sName) then
    tUser:SendData("Bad Nick.")
    tUser:Disconnect()
  end
end
Go to the top of the page
+Quote Post
district
сообщение 22.11.2008, 18:39
Сообщение #144


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




Sephiroth_Lukaw
Ну не знаю, что имел в виду уважаемый докладчик.. Или у меня лыжи совсем уже не едут..))
Запустил в таком виде:
Код
sBot = frmHub:GetHubBotName()
function MyINFOArrival(user)
local _,_,Test=string.find("AAAzzzzddd", "(.)%1%1%1")
if Test then
SendPmToNick("[INT]district",sBot, ""..user.sName.."")
end
end

Ну код мне и выдал каждый ник каждого юзера, при каждом входящем майинфо. В чем тут прикол? Что-то не догоняю :(
Go to the top of the page
+Quote Post
Sephiroth_Lukaw
сообщение 22.11.2008, 18:42
Сообщение #145


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

Группа: Пользователи
Сообщений: 307
Регистрация: 11.7.2008
Пользователь №: 173
Спасибо сказали: 31 раз




ну, по идее, регулярки вроде бы всегда медленнее...
P.S.
local _,_,Test=string.find(user.sName, "(.)%1%1%1")
P.P.S.
И вправду, ты всегда, зачем то лишние "" вставляешь
""..user.sName.."" -> user.sName
Go to the top of the page
+Quote Post
Setuper
сообщение 22.11.2008, 18:55
Сообщение #146


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

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




Действительно, наверное всё же оптимальнее использовать регулярное выражение:
Код
(.)%1%1%1



Код
function ValidateNickArrival(tUser)
  if tUser.sName:find("(.)%1%1%1") then
    tUser:SendData("Bad nick")
    tUser:Disconnect()
  end
end
Go to the top of the page
+Quote Post
district
сообщение 22.11.2008, 19:26
Сообщение #147


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




Setuper
Думаешь, дело может быть в тэге?
Мы ж не весь майинфо стринг исследуем, а конкретный юзерский объект...
Код
$MyINFO $ALL asss0000 сотона<StrgDC++ V:2.2,M:A,H:1/0/0,S:3>$ $100$$140742256829$|

-есть захват

Код
$MyINFO $ALL asss00001 сотона<StrgDC++ V:2.2,M:A,H:1/0/0,S:3>$ $100$$140742256829$|

нет захвата
Кстати, этот захват я попробовал и в ValidateNickArrival, и в NewUserConnected, на всякий случай. Результат тот же.

==============================================================
Ай ребята, ну где ж вы раньше были с таким элегантным и эффективным регулярным выражением ))) Целый день убил, пытаясь захват сделать.

Работает! Может, еще какие-нибудь хитрые выражения есть? (Хабик небольшой, народу немного, нагрузка на ресурсы не бешеная)
Go to the top of the page
+Quote Post
Setuper
сообщение 22.11.2008, 20:40
Сообщение #148


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

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




Если имя клиента является неизвестным, то тег клиента приклеивается к описанию!!!

Функция коррекции данных пользователя:
Код
function GetNormalValue(tUser)
  if not tUser.sTag then
    local _,_,sDescription,sTag,sClient,sClientVersion,sMode,iNormalHubs,iRegHubs,iOpHubs,iSlots,iLlimit=tUser
.sDescription:find("(.*)(<(.+)%sV:(.-),M:(.-),H:(%d+)/(%d+)/(%d+),S:(%d+)>)$")
    if not sDescription then
    _,_,sDescription,sTag,sClient,sClientVersion,sMode,iNormalHubs,iRegHubs,iOpHubs,iSlots,iLlimit=
tUser.sDescription:find("(.*)(<(.+)%sV:(.-),M:(.-),H:(%d+)/(%d+)/(%d+),S:(%d+),L:(%d+)>)$")
    end
    if not sDescription then
    _,_,sDescription,sTag,sClient,sClientVersion,sMode,iNormalHubs,iRegHubs,iOpHubs,iSlots,iLlimit=
tUser.sDescription:find("(.*)(<(.+)%sV:(.-),M:(.-),H:(%d+)/(%d+)/(%d+),S:(%d+),B:(%d+)>)$")
    end
    tUser.sDescription=sDescription
    tUser.sTag=sTag
    tUser.sClient=sClient
    tUser.sClientVersion=sClientVersion
    tUser.sMode=sMode
    tUser.iNormalHubs=iNormalHubs
    tUser.iRegHubs=iRegHubs
    tUser.iOpHubs=iOpHubs
    tUser.iHubs=iNormalHubs+iRegHubs+iOpHubs
    tUser.iSlots=iSlots
    tUser.iLlimit=iLlimit
  end
  return tUser
end


Использование коррекции:
Код
function MyINFOArrival(tUser)
  tUser=GetNormalValue(tUser)
  tUser:SendData("sName = "..tostring(tUser.sName).."\n"..
  "sClient = "..tostring(tUser.sClient).."\n"..
  "sClientVersion = "..tostring(tUser.sClientVersion).."\n"..
  "sMode = "..tostring(tUser.sMode).."\n"..
  "sMyInfoString = "..tostring(tUser.sMyInfoString:sub(1,-2)).."\n"..
  "iShareSize = "..tostring(tUser.iShareSize).."\n"..
  "iHubs = "..tostring(tUser.iHubs).."\n"..
  "iSlots = "..tostring(tUser.iSlots).."\n"..
  "sTag = "..tostring(tUser.sTag).."\n"..
  "sDescription = "..tostring(tUser.sDescription).."\n"..
  "sConnection = "..tostring(tUser.sConnection).."\n"..
  "sEmail = "..tostring(tUser.sEmail).."\n"..
  "iNormalHubs = "..tostring(tUser.iNormalHubs).."\n"..
  "iRegHubs = "..tostring(tUser.iRegHubs).."\n"..
  "iOpHubs = "..tostring(tUser.iOpHubs))
end


Спасибо сказали:
Go to the top of the page
+Quote Post
Wariner
сообщение 22.11.2008, 22:49
Сообщение #149


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




А как захватить несколько сообщений юзера? Т.е. если он пишет
Цитата
<user>10.
<user>2.
<user>100.
<user>240

его кикало. В моём представлении это можно сделать только конкатацией. Есть ещё какие то варианты и как будет реагировать если между сообщениями этого юзера вклинится сообщения ещё кого то?
Go to the top of the page
+Quote Post
Nickolya
сообщение 22.11.2008, 23:06
Сообщение #150


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 776 раз




Поковыряй люцефера, там есть такая штука. Запоминается N сообщений каждого юзера, база, конечно, получется огромной, тогда надо запоминать еще и время сообщений, чтобы очищать ненужные записи, это хорошая, но довольно затратная и сложная (если сделать всё правильно) функция антирекламы...
Go to the top of the page
+Quote Post
mariner
сообщение 23.11.2008, 0:46
Сообщение #151


Местная ТехПоддержка
**********

Группа: Администраторы
Сообщений: 1 875
Регистрация: 18.7.2008
Из: Моск. Обл, г. королев, район Болшево
Пользователь №: 221
Спасибо сказали: 220 раз




Wariner, я вот что посоветую... Ковыряй настройки хаба =) Там есть антифлуд. настрой его как надо и все.
Go to the top of the page
+Quote Post
Nickolya
сообщение 23.11.2008, 1:44
Сообщение #152


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 776 раз




Ну хватит говорить лишь бы о чем-то! Речь идет о сообщениях не повторяющихся, но в сумме дающих адрес.
Идеальной антирекламы сделать не получится, т.к. не будет конца извращениям, генерируемым мозгом человека...
В птоке АНТИФЛУД, а это отностится к антирекламе, которую туда еще не влепили. big_smile1.gif
P.S. удалите сами весь этот "базар"
Go to the top of the page
+Quote Post
district
сообщение 23.11.2008, 6:37
Сообщение #153


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




В свете промелькнувшего "регулярного выражения" хотелось бы снова поднять эту тему. Может, мой вопрос и не затрагивает те самые регулярки? Попытаюсь изложить предметно.

Пока что, в тестовом варианте, проверка юзера идет на трех этапах:
ValidateNickArrival
MyInfoArrival
NewUserConnected

(Насколько я понял, именно в такой последовательности нужно делать, на каждом этапе используя информацию, доступную именно на этом этапе)
Вот есть условие:
Код
if not (user.bOperator or tPNicks[user.sName] or tPIps[user.sIP] or tPProfile[(GetProfileName(GetUserProfile(user.sName)))]) then

которое используется как отменяющее проверку (приписано в начале каждой из трех функций)
Хотелось бы сделать применение условий более гибким, т е создать локальные группы,
а условие, отменяющее проверку и отсылающее к сопоставлению с "членством" в локальной группе, перенести в начало каждой из кучи прикладных функций: NoProxy, OneIP4OneClient, CheckNick, CheckDesc, CheckEmail, и т д, которые, как я где-то писал об этой идее, подключаются по мере необходимости простым раскомментированием имени функции.
например как-то так
локальная группа А = принадлежность к таблицам х, у и/или профилю такому-то...
Что-то мудревато пока получается, в голове не складывается. Может, есть наработки, чтобы не изобретать велосипед?

Setuper
Почему ж все-таки захваты не работают? Я посмотрел крайний захват МайИнфо, который ты привел. В сравнении с моим первый "блином комом", там нет лишнего %S+ , которое я по ошибке поставил между перечислением хабов и слотами. Но все равно работает от раза к разу, то все выдает, то все по нулям. С чем тут еще может быть связано? Речь-то пока ни о каких не левых юзерах, теги всех присутствующих учтены в ClientTags, хотя, стоит крыжик "Принимать тэг от неизвестного клиента за действительный". Может, это баг Птоки такой, забыть и не мучиться? Птока - 0360 LUA 5.1.2
doubt.gif
Go to the top of the page
+Quote Post
Setuper
сообщение 23.11.2008, 13:21
Сообщение #154


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

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




Ты идёшь по моим стопам. Именно такую фишку я реализовал в моём боте, но немного более сложную чем ты предполагаешь сделать, а именно, в базе данных существует таблица с действиями. Таблица состоит из следующих столбцов (строк может быть любое количество): он_офф, Тип_действия, действие, номер_профиля_s, номер_профиля_e, номер_текущего_профиля_s, номер_текущего_профиля_e, ip_s, ip_e, ник.
В таблице указаны действия и их применимость или не применимость к определённой группе. Например, тип_действия=оповещение, действие=вход_с_запрещённых_ip, номер_профиля_s=5, номер_профиля_e=12, номер_текущего_профиля_s=1, номер_текущего_профиля_e=nil, ip_s=nil, ip_e=nil, ник=nil. Таким образом, оповещение о входе пользователя с запрещённым ip поступит профилям, начиная с номера 5, до номера 12, если текущий профиль меньше пятого, однако, если текущий профиль пользователя больше, либо равен пятому, то параметр номер_текущего_профиля_s говорить сколько надо прибавить к текущему профилю, чтобы отсылать оповещений. В данном случае надо прибавить 1, а так как номер_текущего_профиля_e=nil, то последний профиль не изменяется, таким образом, если текущий профиль меньше пятого, то оповещение отправится всем профилям от 5 до 12, иначе оповещение отправится профилям от (текущий_профиль + 1) до 12. Кроме этого, если параметры ip_s, ip_e и ник не указаны, то оповещение отправляется только профилям, если же, например, ip_s=0, ip_e=167772160, то оповещение прийдёт только тем профилям, которым разрешено плюс ip этих пользователей должны будут лежать в диапазоне 0.0.0.0 (=0) - 10.0.0.0 (=167772160), а если ещё указывается и ник, то оповещение отправляется указанному нику, но при условии, что профилю с этим ником разрешена отсылка, и ip адрес этого ника лежит в разрешённом диапазоне.

Конечно это очень сложный механизм со сложной реализацией, который использует хранение в базе данных, но этот механизм очень универсальный. Любой действие или антидействие в нём прописано, от отсылки оповещений и менюшек до собственных параметров каждого пользователя.

Что касается захватов, то последняя моя функция коррекции должна работать всегда. Как её использовать я тоже прописал.
Go to the top of the page
+Quote Post
district
сообщение 23.11.2008, 18:15
Сообщение #155


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




Setuper
Ясно.. что ничего не ясно big_smile.gif
Ну да ладно. Вот есть небольшой вопрос: как организовать разделители в менюшках, если в коде использованы вот такие конструкции?
Код
tRC = {{"Дать иммунитет", " add %[line:Ник]" }, { "Забрать иммунитет", " remove %[line:Ник]" } }

Сверху этого пункта в меню получается еще три, хотелось бы их отделить, по типу
$UserCommand 0 3
Go to the top of the page
+Quote Post
Setuper
сообщение 23.11.2008, 18:19
Сообщение #156


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

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




зачем все эти навороты с разделениями, которые потом всё равно собираются в один код отправки, тем более, что эти разделения только для разработчика.

Просто пиши уже готовые коды без разделений
Go to the top of the page
+Quote Post
district
сообщение 23.11.2008, 18:54
Сообщение #157


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




Я вот что имел в виду (на картинке)
Тут приведен пример правда из обычного оформления юзерской команды, через сенд дата.
Сверху и снизу меню скрипта погоды обставлено "разделителями" - снизу есть, сверху не получается. (красная линия)
Даже в обычном варианте трудности.
Как тут быть? И тем более, как быть в первом вопросе?
Прикрепленные файлы
Прикрепленный файл  менюшки_вопрос.PNG ( 7.72 килобайт ) Кол-во скачиваний: 55
 
Go to the top of the page
+Quote Post
Setuper
сообщение 23.11.2008, 19:12
Сообщение #158


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

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




Разделитель нельзя поставить снизу менюшки со стрелочкой. Если ты немного задумаешься как отправляются менюшки, то думаю, что ты сможешь понять почему.

Например в твоём случае:
есть менюшка: Объявления, Релизы, Запросы\\Подменю
Если после этой менюшки ставить разделитель, то он появится после "Подменю" а не после "Объявления, Релизы, Запросы", потому что разделитель нельзя вставить между ними, так как они отправляются как единое целое.

Надеюсь ясно изложил?
Go to the top of the page
+Quote Post
district
сообщение 23.11.2008, 20:38
Сообщение #159


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




Setuper
Цитата
Разделитель нельзя поставить снизу менюшки со стрелочкой.

примерно так и думал, спасибо.
Насчет разделителей, когда пункты меню создаются как
Код
tRC = {{"Дать иммунитет", " add %[line:Ник]" }, { "Забрать иммунитет", " remove %[line:Ник]" } }
вопрос остался открытым..
Go to the top of the page
+Quote Post
Wariner
сообщение 23.11.2008, 20:39
Сообщение #160


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




2Setuper: если не сложно можешь сказать несколько слов о метатаблицах. Я как всегда несколько не понял описания на http://lua.ru
Go to the top of the page
+Quote Post

53 страниц V  « < 6 7 8 9 10 > » 
Ответить в данную темуНачать новую тему
16 чел. читают эту тему (гостей: 16, скрытых пользователей: 0)
Пользователей: 0

Collapse

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

  Тема Ответов Автор Просмотров Последнее сообщение
No new ВАЖНО: Topic has attachmentsМодули для скриптов RusHub
26 Setuper 45 394 21.3.2017, 17:31 Посл. сообщение: Alexey
No new ВАЖНО: Topic has attachmentsВаши Вопросы И Предложения По Поводу Форума
447 Svyat 322 163 20.10.2015, 19:39 Посл. сообщение: Ksan
No New Posts От: Вопросы Разработчикам Скриптов
От темы с ID: 173
0 MIKHAIL 4 337 23.1.2015, 0:56 Посл. сообщение: MIKHAIL
No new Topic has attachmentsВопросы по протоколу NMDC
Делаю программу
26 Master255 29 751 12.1.2015, 0:38 Посл. сообщение: Master255
No New Posts Вопросы к Phazeus по Экзекутору
Мастер может забанить мастера, как решить в Экзекуторе?
1 AndreiDC 5 373 31.10.2014, 19:20 Посл. сообщение: Ksan
No New Posts От: Установка скриптов
От темы с ID: 5657
0 MIKHAIL 4 800 29.7.2014, 23:37 Посл. сообщение: MIKHAIL
No New Posts Установка скриптов
Нужна помощь по установке
2 _wRz_ 7 309 29.7.2014, 16:11 Посл. сообщение: Артём
No new От: Вопросы Разработчикам Скриптов
От темы с ID: 173
29 Wariner 25 996 28.1.2014, 13:11 Посл. сообщение: Alexey
No new Topic has attachmentsВопросы по RusHub
Технические вопросы
316 Jaska 269 300 19.12.2013, 13:59 Посл. сообщение: mod
No new Topic has attachmentsМелкие вопросы
44 Wariner 50 989 19.9.2013, 12:34 Посл. сообщение: Alexey
No New Posts От: Ваши Вопросы И Предложения По Поводу Форума
От темы с ID: 753
3 anila 9 130 28.3.2013, 16:02 Посл. сообщение: настя
No New Posts Единая платформа для скриптов
Обсуждения вопроса создания единой платформы скриптов
5 Enyby 9 056 18.1.2012, 20:15 Посл. сообщение: Setuper
No new Topic has attachmentsПеределка скриптов
Прошу помощи
47 Fe(one)X 41 396 26.12.2011, 15:04 Посл. сообщение: Ksan
No new Topic has attachmentsВопросы Разработчикам Скриптов с SQL
вопросы по скриптам (мелкие вопросы)
101 Wariner 62 320 6.12.2011, 0:34 Посл. сообщение: Enyby
No New Posts От: Вопросы по RusHub
От темы с ID: 2902
4 Otshelnik-Fm 8 471 19.10.2011, 9:23 Посл. сообщение: Mangust

 



RSS Сейчас: 27.11.2024, 1:06