IRC Client KVIrc forum

Russian talks => Вопросы по работе отдельных функций и команд => Topic started by: anisim on 6 November 2007, 08:45



Title: Перехват сообщений, содержащих мой ник
Post by: anisim on 6 November 2007, 08:45
Как перехватывать сообщения других где иммется ваш ник? напр поставвить автоответ на слапы...


Title: Перехват сообщений, содержащих мой ник
Post by: runkoff on 6 November 2007, 10:29
Как перехватывать сообщения других где иммется ваш ник? напр поставвить автоответ на слапы...
Code:
event(OnChannelMessage,antimat)
{
   if($str.find($3, $me) > -1)
   {
      # реагируем на ник в сообщении
      say $0", ты посмел меня потревожить? Знай смерд, мне не до тебя!"
   }
}
$3 - это текст сообщения
$0 - это ник от кого получено сообщение
поскольку обращаясь не посредственно к тебе, люди обычно ставят твой ник в начале сообщения, то проверку можно изменить. чтобы не реагировать на сообщения когда тебя просто упоминают в тексте.
например: if($str.find($3, $me) = 0)
Проверять можно не только наличие ника в сообщении, но и каких то шаблонов характерных для слапа


Title: Перехват сообщений, содержащих мой ник
Post by: anisim on 6 November 2007, 16:41
(OnChannelMessage,antimat)

а как сообытие это сделать штобы одной кнопочкой (напр "ctrl+a") включать/выключать?


Title: Re: Перехват сообщений, содержащих мой ник
Post by: Maximusya on 6 November 2007, 20:00
Есть событие OnHighlight
Оно возникает, если включена функция подсветки (по умолчанию подсвечивается ваш ник, но есть диалог настроек, в котором можно внести в список подсвечиваемых слов и другие слова - я, например, внес туда разные формы написания своего ника, на разных языках и тп.)
По параметрам, передаваемым в это с событие - читай /help onhighlight))


Title: Re: Перехват сообщений, содержащих мой ник
Post by: anisim on 7 November 2007, 08:21
нет я вот поставил на сообщения типа на мой ник. Но он срабатывает при каждом обращении на меня
[13:09:46] <+АНЮ> An6Ism ~»как дела?
[13:09:46] An6Ism АНЮ, шо ты там меня трогаешь?
, хочу сделать (напр "ctrl+a")чтобы выключать и включать эту функцию, иногда мне та надо такие сообщения. хотел чтобы если в сообщении мой ник стоит в начале текста то не срабатывала, но есть моменты когда у кого то скрипты сделаны иначе, например:
[13:09:46] <+АНЮ> >> An6Ism << ~»как дела?
[13:09:46] An6Ism АНЮ, шо ты там меня трогаешь?
в таких случаях опять жэ срабатывает


Title: Re: Перехват сообщений, содержащих мой ник
Post by: runkoff on 7 November 2007, 09:10
добавь флаг в виде глобальной переменной и обрабатывай сообщений только если он включен.
Code:
event(OnChannelMessage,antimat)
{
   if(%MyFlag == 1)
   {
     if($str.find($3, $me) > -1)
     {
        # реагируем на ник в сообщении
        say $0", ты посмел меня потревожить? Знай смерд, мне не до тебя!"
     }
   }
   else
   {
      # echo "автоответ выключен"
   }
}
и кнопку для включения/выключения. смотри на -k="ctrl+a", действие будет срабатывать по нажатию ctrl+a
Code:
action.create -t=generic -k="ctrl+a" ("MyAction1",$tr("My Action"),$tr("Put here a short description of your action"),"","")
{
if(%MyFlag == 1) %MyFlag = 0
else %MyFlag = 1
       
        # echo "MyFlag = "%MyFlag
}
еще все это можно привязать к $away (читай в справке) или даже подумать как можно ко всему этому прикрутить onMeAway и onMeBack


Title: Re: Перехват сообщений, содержащих мой ник
Post by: upyx on 9 November 2007, 21:35
Code:
%MyFlag = $(!%MyFlag)
:D


Title: Re: Перехват сообщений, содержащих мой ник
Post by: runkoff on 9 November 2007, 22:24
дада, я именно это и имел ввиду :)


Title: Re: Перехват сообщений, содержащих мой ник
Post by: virtuoz on 15 November 2007, 23:17
простите, но нельзя ли на все это в собранном виде взглянуть, не могли бы как дополнение чтобы установить сделать  =) а то совершенно непонятно как эту кнопочку добавить, в скриптостроении совершенно ничего не понимаю ;)
при попытке выполнить выдает:
[23:52:13] [KVS] Ошибка при выполнении: найдена пустая строка там где ожидается непустая
[23:52:13] [KVS]   в контексте скрипта "kvirc::corecall(run)", Строка 1, около символа 1


Title: Re: Перехват сообщений, содержащих мой ник
Post by: runkoff on 16 November 2007, 01:00
простите, но нельзя ли на все это в собранном виде взглянуть, не могли бы как дополнение чтобы установить сделать  =) а то совершенно непонятно как эту кнопочку добавить, в скриптостроении совершенно ничего не понимаю ;)
прочти тему "как устанавливать скрипты", пригодится. http://www.kvirc.ru/forum/topic,147.0
этот скрипт можно поставить по варианту 1 из той темы
event(OnChannelMessage,antimat) - это создаст реакцию на сообщения пользователей в канал, тут доступны несколько переменных
$0 = ник
$1 = имя пользователя
$2 = хост
$3 = сообщений
$4 = [target mode prefixes]

action.create -t=generic -k="ctrl+a" ("MyAction1",$tr("My Action"),$tr("Put here a short description of your action"),"","") - это создаст кнопку. тут мы управляем глобальной переменной, ориентируясь на которую, мы определяем стоит отвечать пользователю или нет. вместо глобольной переменой которую мы переключаем вручную, можно использовать функции, которые зависят , например, от состояния away и т.п.

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

ЗЫ: скрипт 100% выполняемый, скорее всего ты где то опечатался.


Title: Re: Перехват сообщений, содержащих мой ник
Post by: virtuoz on 16 November 2007, 01:13
про установку я первым делом прочитал, сам скрипт ставится, а вот кнопочка никак не создается, опечатки быть не может, поскольку копипастил просто, может это уже не в окошке теста сценариев надо делать? :)


Title: Re: Перехват сообщений, содержащих мой ник
Post by: runkoff on 16 November 2007, 09:04
про установку я первым делом прочитал, сам скрипт ставится, а вот кнопочка никак не создается, опечатки быть не может, поскольку копипастил просто, может это уже не в окошке теста сценариев надо делать? :)
для кнопки там не указаны иконки. последние два параметра, проставь там какую нить цифру, первая это для маленькой иконки, вторая для большой.
action.create -t=generic -k="ctrl+a" ("MyAction1",$tr("My Action"),$tr("Put here a short description of your action"),"1","1")
после того как кнопка появится в редакторе действий можешь вытащить ее на любую панель, или вызывать по ctrl+A


Title: Re: Перехват сообщений, содержащих мой ник
Post by: anisim on 22 November 2007, 21:50
action.create -t=generic -k="ctrl+a" ("MyAction1",$tr("My Action"),$tr("Put here a short description of your action"),"1","1")
это создает действие, это я понял

а где тут он узнает что именно OnChannelMessage,antimat это событие должен включать\выключать?


Title: Re: Перехват сообщений, содержащих мой ник
Post by: runkoff on 23 November 2007, 00:12
а где тут он узнает что именно OnChannelMessage,antimat это событие должен включать\выключать?
тут не узнает, точнее имнно тут ему знать и не обязательно. тут мы изменяем значение глобальной переменной %MyFlag (значение глобальной переменной доступно в любом участке кода: в событиях, в действиях, в алиасах, в всплывающих меню).
и посмотри в обработчике события, что мы первым делом проверяем?


Title: Re: Перехват сообщений, содержащих мой ник
Post by: Azag ToT on 25 March 2009, 21:29
Вот мой вариант, активируемый алиасом. Сделан на основе скрипта из этой темы :)

Code:
if(%MyFlag == 1)  %MyFlag = 0
   else %MyFlag = 1
#=================================== 
if (%MyFlag == 1)
 {
  echo Автоответ включен
 }
  else
  {
   echo Автоответ выключен
  }
#===================================

event(OnChannelMessage,antislap)
 {
 if (%MyFlag == 1)
    {
       if($str.find($3, $me) > -1)
      {
         //# реагируем на ник в сообщении
         say $0", ты посмел(а) меня потревожить? А вот фиг тебе. Меня за компом нет."
      }
    }
 }