LINUX.ORG.RU

IRC-бот на Perl

 , ,


1

1

Люди, нужен совет! Есть скрипт IRC-бота (точнее, его заготовка), использующий AnyEvent::IRC::Client. Для дальнейшего развития интересуют несколько вопросов:

  1. Нужен какой-то обработчик комманд. Что-то типа Getopt. Сейчас у меня сделано примитивным образом:
    if($msg =~ /!cmd\s+(.*)/') { # do something with $1 }
    
  2. Необходимо сделать автоматическую подгрузку модулей с обработчиками комманд. Что-то типа плагинов.
  3. Нужно перезагружать модули по необходимости (по комманде, например) дабы не перезапускать всего бота.

Интересуют советы, решения и ссылки на цпан :)

★★

Посмотри Parse::IRC на сипане: «A parser for the IRC protocol». С модулем хорошие примеры.

С модульностью ты зря связялся. Точнее с горячей заменой кода. Ничего хорошего из этого не выйдет.

outtaspace ★★★
()
Ответ на: комментарий от VeroLom

Слишком сложно реализовывается. Будет нечто похожее на манкипатчинг в рантайме, с хуками которые будут заниматься переинициализацией созданных объектов в рантайме.

Гораздо проще делать рестарт при обновлении кодовой базы или перейти к архитектуре со стабильным ядром (оно держит коннект и меняется крайне редко) которое общается с воркерами (отдельные процессы - можно рестартить) твоей аппликации через очередь. Все это non-blocking. Воркер рестартится -> накапливаются сообщения в очереди -> воркер активен и разгребает завалы из очереди. Это легко реализовать через AnyEvent.

outtaspace ★★★
()
Ответ на: комментарий от VeroLom

Это плохо только в заданном контексте - когда работаешь с Perl.

outtaspace ★★★
()
Ответ на: комментарий от outtaspace

Гораздо проще делать рестарт при обновлении кодовой базы или перейти к архитектуре со стабильным ядром (оно держит коннект и меняется крайне редко) которое общается с воркерами (отдельные процессы - можно рестартить) твоей аппликации через очередь. Все это non-blocking. Воркер рестартится -> накапливаются сообщения в очереди -> воркер активен и разгребает завалы из очереди. Это легко реализовать через AnyEvent.

Это уже интереснее. Как это реализовать через AnyEvent?

VeroLom ★★
() автор топика
Ответ на: комментарий от iSage

Спасибо, будет полезно, я думаю :)

VeroLom ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.