IRC Bot - защита от наводнений (питон) - PullRequest
0 голосов
/ 20 апреля 2011
  if data.find('PRIVMSG') != -1:
     nick = data.split('!')[ 0 ].replace(':','')
     text = ''
     if data.count(text) >= 200:
        sck.send('KICK ' + " " + chan + " :" 'flooding' + '\r\n')

Я пытаюсь закодировать защиту от наводнений для бота, я хочу, чтобы он пнул пользователя, если он вводит более 200 символов, как я могу сделать так, чтобы он мог читать другие строки, а не только первую строку? и приведенный выше код не работает, он не пинает пользователя, но если я изменю sck.send() на sck.send('PRIVMSG ' + chan + " :" 'flooding' + '\r\n'), он работает.

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

  if data.find('PRIVMSG') != -1:
     nick = data.split('!')[ 0 ].replace(':','')
     text = ''
     if data.count(text) >= 200:
        sck.send('KICK ' + " " + chan + " " + nick + " :" 'flooding' + '\r\n')

1 Ответ

0 голосов
/ 20 апреля 2011

Насколько я помню, двоеточие является зарезервированным символом в протоколе IRC. То есть первая двоеточие в сообщении сервера обозначает начало предоставленных пользователем данных (поэтому также «:» не допускается в никах / именах каналов). Следовательно, достаточно найти первое двоеточие и вычислить длину оставшейся строки.

Кроме того, data.find('PRIVMSG') довольно ненадежно. Что если пользователь вводит слово «PRIVMSG» в обычном разговоре на канале? Посмотрите на IRC RFC, он детально определяет формат PRIVMSG.

Кроме того, вы должны быть немного более конкретным. С какой именно проблемой вы сталкиваетесь? Извлекать ник? Вычислить длину сообщения? Подключение к IRC?

...