Categories: Python

python-irc-bot/

Иногда бывает нужно синтегрироваться со Slack, Gitter, или подобного рода веб-чатом. Например, посылать в него сообщение при происшествии определенного события. К сожалению, подобные сервисы имеют сильно разные и иногда не слишком удобные для этих целей API. Зато многие, включая тот же Slack и Gitter, позволяют ходить в них по IRC. Более того, с помощью программы bitlbee по IRC можно ходить еще и в Skype, Jabber, Twitter и многое другое. Грех этим не воспользоваться.

Ниже приведен код скрипта, отправляющего заданный список сообщений по IRC:

#!/usr/bin/env python3

# (c) Aleksander Alekseev 2016, http://remontka.com/

import socket , ssl , time

def irc_send ( conf , msg_list ) :
if msg_list == [ ] :
return
tcp_sock = socket . socket ( socket . AF_INET , socket . SOCK_STREAM )
ssl_sock = ssl. wrap_socket ( tcp_sock )
ssl_sock. connect ( ( conf [ ‘host’ ] , int ( conf [ ‘port’ ] ) ) )

def ssl_send ( cmd ) :
ssl_sock. write ( cmd . encode ( ) + b r n )

ssl_send ( ‘USER {0} localhost localhost {0}’ . format ( conf [ ‘nick’ ] ) )
ssl_send ( ‘NICK {}’ . format ( conf [ ‘nick’ ] ) )
ssl_send ( ‘PASS {}’ . format ( conf [ ‘password’ ] ) )
ssl_send ( ‘JOIN #{}’ . format ( conf [ ‘channel’ ] ) )
for msg in msg_list:
ssl_send ( ‘PRIVMSG #{} :{}’ . format ( conf [ ‘channel’ ] , msg ) )
# time.sleep(1.1)
ssl_send ( ‘QUIT’ )

while True :
data = ssl_sock. read ( )
if data == b » : # enf of file
break

ssl_sock. close ( )

irc_config = {
‘host’ : ‘irc.gitter.im’ ,
‘port’ : ‘6667’ ,
‘nick’ : ‘devzen_ru_twitter’ ,
‘password’ : ‘SECRET’ ,
‘channel’ : ‘DevZenRu/live’
}

irc_send ( irc_config , [ ‘Message 1’ , ‘Message 2’ ] )

Здесь используется собственная реализация протокола, поскольку мне не очень нравится интерфейс существующих реализаций, того же пакета irc , а также потому что мне нужно было просто отправить сообщение в чат и тут же отключиться. Учитывая простоту протокола, удобнее написать свои пять строк кода и не тянуть лишние зависимости, для использования которых потребуется еще и использовать virtualenv .

Если вам нужно написать что-то чуть более сложное, например, собирать логи, или выполнять команды пользователей в чате, вас может заинтересовать проект Legobot . Обратите также внимание на мою старую заметку Краткое описание протокола IRC и пример бота . Протокол IRC действительно прост до безобразия, поэтому, возможно, и нет смысла использовать для него зависимости.

admin

Recent Posts

Консоль удаленного рабочего стола(rdp console)

Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…

1 месяц ago

Настройка сети в VMware Workstation

В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…

1 месяц ago

Логи брандмауэра Windows

Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…

1 месяц ago

Правильный способ отключения IPv6

Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…

1 месяц ago

Ключи реестра Windows, отвечающие за параметры экранной заставки

Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…

1 месяц ago

Как управлять журналами событий из командной строки

В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…

1 месяц ago