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

Что такое Zulip

Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…

3 дня ago

Что такое Zookeeper

Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…

3 дня ago

Что такое Zimbra

Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…

3 дня ago

Что такое Zabbix

Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…

3 дня ago

Что такое YouTube

YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…

3 дня ago

Что такое yota

Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…

3 дня ago