RusHub: Запрет неразрывного пробела, rushub |
Здравствуйте, гость ( Вход | Регистрация )
RusHub: Запрет неразрывного пробела, rushub |
26.1.2012, 16:34
Сообщение
#1
|
|
Освоившийся участник Группа: Пользователи Сообщений: 216 Регистрация: 23.10.2008 Из: Саратов Пользователь №: 865 Спасибо сказали: 60 раз |
Автор: Setuper
Название: Запрет неразрывного пробела в чате или ПМ. Описание: Этот символ не распознается хаб-клиентами и им могут воспользоваться спамеры для рассылки любой рекламы, обхода антимата и пр. Идею буквально вчера предложил Andrean, когда проверял мои RegEx'ы. Если не хотите перегружать хаб скриптами, то просто добавьте этот символ в антирекламу. Символ неразрывного переноса виден в блокноте, просто скопируйте и поставьте этот символ в вашу антирекламу. Код local sBot = Config.sHubBot function OnChat(UID, sData) if UID.iProfile == -1 or UID.iProfile == 3 then local sText = sData:sub(#UID.sNick + 4, -1) if sText:find"\160" then Core.SendToUser(UID, "*** Использование неразрывного пробела в тексте запрещено!", sBot) return true end end end function OnTo(UID, sData) if UID.iProfile == -1 or UID.iProfile == 3 then local sTo, sText = sData:match("^%$To:%s+(%S+)%s+From:%s+(.*)") if sText:find"\160" then Core.SendToUser(UID, "*** Использование неразрывного пробела в тексте запрещено!", sBot, sTo) return true end end end P.S. Надеюсь вместе, мы шаг за шагом увеличим функционал нашего хаб-сервера .. Спасибо Илье за правку черновой копии скрипта. |
|
|
26.1.2012, 17:21
Сообщение
#2
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
ShadoWx, разве в АПИ Русхаба нет возможности объединить в одной функции и чат и приват?
Если есть, сделай это, так как код один и тот же, только шапка разная. При одинаковой функциональности кода будет 2 раза меньше. И ещё - делай сразу так: Код if sData вместо Код if sText и удали предыдущую строку, где ты получаешь sText.Для твоего кода совершенно ни к чему захватывать сообщение отдельно. |
|
|
26.1.2012, 17:31
Сообщение
#3
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Ksan,
Код Core.SendToUser(tUser, "*** Использование неразрывного пробела в тексте запрещено!", sBot) Код Core.SendToUser(tUser, "*** Использование неразрывного пробела в тексте запрещено!", sBot, sTo) чуешь разницу? |
|
|
26.1.2012, 17:34
Сообщение
#4
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
Setuper, я это видел. К тому же, там вообще не sTo должно быть, а sFrom, если уж на то пошло.
Но разве ты не делал возможность объединять функции, делая разницу только в аргументах? Я что-то такое помню из твоих давних разговоров. Ты вроде говорил, что подставляешь один аргумент - сообщение идёт туда. Ведь sFrom = tUser.sNick (или как там он у вас в Русхабе пишется) В соообщении от бота sTo совершенно ни к чему, это же ник того, кому пытался юзер отправить сообщение. А нужен ли вообще вместо sTo - sFrom, я не могу сказать, ибо в АПИ Русхаба не разбираюсь. В Птоке точно не нужен, так как направление уже указано через tUser. |
|
|
26.1.2012, 17:56
Сообщение
#5
|
|
Освоившийся участник Группа: Пользователи Сообщений: 216 Регистрация: 23.10.2008 Из: Саратов Пользователь №: 865 Спасибо сказали: 60 раз |
Сейчас протестировал скрипт, у меня он пропускает текст с неразрывным интервалом ... просто копирую из блокнота этот символ в чат или пм
я запутался.. |
|
|
26.1.2012, 20:28
Сообщение
#6
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Ksan, ну если не разбираешься, то зачем советы давать?
В русхабе в функции Core.SendToUser четвёртый аргумент отвечает за личку, то есть команда: Код Core.SendToUser(tUser, sMsg, sBot, sTo) отправит сообщение sMsg в личку между пользователем tUser и ником sTo с именем бота sBot в сообщении.По NMDC протоколу это будет выглядеть так: Код $To: [tUser.sNick] From: [sTo] $<[sBot]> [sMsg]|
|
|
|
26.1.2012, 20:29
Сообщение
#7
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
Setuper, как у тебя всё запутано!
Извини, даже после твоего пояснения я не понял, то ли ты там описал небрежно, то ли что..Не хочется развивать разбор этих нюансов.. Что до обвинений меня - так помогайте сами, человек уже запарил чат хаба Майдц, мой приват там же, я хоть пытаюсь помочь, а те, кто занимается Русхабом, упорно делают вид, что не замечают его просьбы. И тут ты появился только после того, когда я что-то не так подсказал. Как понимаю, так и подсказываю. ShadoWx, вот тебе работающий на Птоке код: Код function ChatArrival(tUser, sData) Попытайся переделать его под себя. Хотя вроде они похожи.
local sMsg = sData:match("^%b<>%s(.-)$") if sMsg:find"" then Core.SendToNick("ShadoWx", "Неразрывный перенос") return true elseif sMsg:find" " then Core.SendToNick("ShadoWx", "Неразрывный пробел") return true end end |
|
|
26.1.2012, 20:39
Сообщение
#8
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
ShadoWx, подправил твой первый пост, теперь должно работать
|
|
|
26.1.2012, 21:27
Сообщение
#9
|
|
Освоившийся участник Группа: Пользователи Сообщений: 216 Регистрация: 23.10.2008 Из: Саратов Пользователь №: 865 Спасибо сказали: 60 раз |
Ksan, Setuper, большое спасибо
|
|
|
26.1.2012, 21:38
Сообщение
#10
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Ksan, Ты думаешь я ему ни подсказываю?
Пожалуйста не обижайся на мою критику, я иногда бываю резок, когда дело касается нюансов. Отчасти я так сказал только для того чтобы ты обратил внимание на нюансы, а не пытался заменить код на более простой, но менее функциональный. Теперь аналог этого кода для птохи, для того чтобы можно было попробовать как это работает: Код local sBot = "Bot" function ChatArrival(tUser, sData) if tUser.iProfile == -1 or tUser.iProfile == 3 then local sText = sData:sub(#tUser.sNick + 4, -2) if sText:find"\160" then SendToUser(tUser, "*** Использование неразрывного пробела в тексте запрещено!", sBot) return true end end end function ToArrival(tUser, sData) if tUser.iProfile == -1 or tUser.iProfile == 3 then local sTo, sText = sData:sub(1, -2):match("^%$To:%s+(%S+)%s+From:%s+(.*)") if sText:find"\160" then SendToUser(tUser, "*** Использование неразрывного пробела в тексте запрещено!", sBot, sTo) return true end end end function SendToUser(tUser, sMsg, sNick, sSender) if sSender and sNick then Core.SendToUser(tUser, (("$To: %s From: %s $<%s> %s"):format(tUser.sNick, sSender, sNick, sMsg))) elseif sNick then Core.SendToUser(tUser, (("<%s> %s"):format(sNick, sMsg))) end end P.S. Для того чтобы набрать неразрывный пробел нужно включить Num Lock и, удерживая alt, набрать 0160 на расширенной клавиатуре, после этого отпустить alt. |
|
|
26.1.2012, 21:58
Сообщение
#11
|
|
Освоившийся участник Группа: Пользователи Сообщений: 391 Регистрация: 4.11.2009 Из: Дом Пользователь №: 4 923 Спасибо сказали: 239 раз |
Setuper, можно набрать ALT+255 - эффект будет тот же. Просто в первом случае набор идет через юникод, а во втором через win1251.
|
|
|
26.1.2012, 22:20
Сообщение
#12
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
Да знаю я, как эти символы набрать на клавиатуре..
|
|
|
Похожие темы
|
Сейчас: 27.11.2024, 2:59 |