[perl] Simple ICQ bot

Discussion in 'PHP' started by eLWAux, 19 Jan 2009.

  1. eLWAux

    eLWAux Elder - Старейшина

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    [​IMG]
    простой ICQ бот на perl!, основным достоинством которого является модульность и легкость добавления новых функций.

    Бот состоит из основного скрипта, к которому можно подключать плагины на PERL, неограниченно расширяя его функционал.

    * Администрирование бота осуществляется по ICQ.
    * Легкость разработки и установки плагинов
    * Основной скрипт обладает множеством функций для упрощения разработки плагинов, благодаря чему разработка плагина фактически состоит только из написания непосредственно выполняемой им функции
    * Для добавления нового плагина боту нужно всего лишь поместить файл плагина в папку плагинов и перезапустить бота.
    * Огромные возможности плагинов
    * Возможности плагинов ограничены лишь возможностями языка perl


    для корректной работы необходим ActivePerl или любая ос *nix.

    в config.ini настройки (формат: имя = значение) :
    в plugins.ini список плагинов (в формате: команда;файл):

    написание плагина
    любой программист может написать свой плагин для бота, придерживаясь спецификации языка программирования perl.
    бот передает вашему скрипту следующие переменные:
    * $rs - ответ сервера
    * $_UIN - номер отправителя
    * $_MSG - сообщение
    * @_MESG - масив слов в сообщении (пример:
    $_MSG = 'hello my name elwaux', тогда
    @_MESG[1]='hello', @_MESG[2]='my', @_MESG[3]='name', ...)
    * $admin - номер админа
    * $uin - номер бота
    * $password - пароль бота
    * также можно получить любое значение из config.ini:
    $CONFIG{имя}
    (пример: в config.ini: testing == nana,
    тогда чтоб получить значение имени testing: $CONFIG{'testing'})

    также ви можете использовать готовие функции:
    * saveFile(file, text) - сохранить text в файл file
    * logIt(file, text) - ввести в лог file текст text
    * auth(uin, reason) - авторизация на номер uin с причиной reason
    * send_msg(uin, msg) - отправить сообщение msg на номер uin

    пример плагина hello_world.pl:
    (!helloword msg) - оправляет вам обратно текст msg
    Code:
    send_msg($_UIN,@_MEST[1]);
    на команду: !helloworld testing_my_first_plugin
    бот вам ответит: testing_my_first_plugin



    вот и все пока..
    большая просьба ко всем кто скачал:
    отпишите здесь о том что вам понравилось или нет у бота, что бы вы хотели еще увидеть в нем, какие недостатки встретили.. и так далее..)
    рад всем ответам!
     

    Attached Files:

    12 people like this.
  2. X-Venom

    X-Venom Banned

    Joined:
    29 Apr 2008
    Messages:
    569
    Likes Received:
    365
    Reputations:
    21
    хороший бот, на перле никогда не встречал
     
  3. heretic1990

    heretic1990 Elder - Старейшина

    Joined:
    2 Jul 2008
    Messages:
    487
    Likes Received:
    182
    Reputations:
    5
    сам писал или основу брал?
     
  4. eLWAux

    eLWAux Elder - Старейшина

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    полностью сам с нуля.
     
    3 people like this.
  5. Sharky

    Sharky Elder - Старейшина

    Joined:
    1 May 2006
    Messages:
    487
    Likes Received:
    312
    Reputations:
    46
    заслужил +++++ :) не испытывал, но за старания и кроссплатформенность респект
     
    1 person likes this.
  6. Ил-2

    Ил-2 Banned

    Joined:
    16 Jul 2008
    Messages:
    9
    Likes Received:
    11
    Reputations:
    5
    =>

    *У perl'a огромные возможности
    #у этого кода нет
     
  7. eLWAux

    eLWAux Elder - Старейшина

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    я имел в виду, что можна написать любой нужний плагин, с любими нужними функциями
     
    1 person likes this.
  8. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Не надоело везде подобные комментарии писать? Может сам что-нибудь напишешь и выложишь?
     
    _________________________
    1 person likes this.
  9. heretic1990

    heretic1990 Elder - Старейшина

    Joined:
    2 Jul 2008
    Messages:
    487
    Likes Received:
    182
    Reputations:
    5
    тогда молоток, лови +
    P.S. желаю удачи и дальнейшего развития бота!
     
  10. Ил-2

    Ил-2 Banned

    Joined:
    16 Jul 2008
    Messages:
    9
    Likes Received:
    11
    Reputations:
    5
    тебя ткнули лицом в твой быдлокод и ты до сих пор успокоиться не можешь чтоли?)

    upd: а может тебя моя фотокарточка раздражает?
    ^^
     
    #10 Ил-2, 19 Jan 2009
    Last edited: 19 Jan 2009
  11. Arigona

    Arigona Banned

    Joined:
    9 Dec 2008
    Messages:
    99
    Likes Received:
    22
    Reputations:
    -5
    просто не мог не поставить +. + и даже 2 0.o ну я не богатый =)

    ЗЫ, на винде пашет? И возможно его на хосте установить? В этом не шарю, извените за глупые вопросы, учусь..
     
  12. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Ну так что же ты не покажешь всем пример своего православного кода, дабы все восхитились и не обсуждали твое постоянное порицание чужих творений?
     
    _________________________
    1 person likes this.
  13. Ил-2

    Ил-2 Banned

    Joined:
    16 Jul 2008
    Messages:
    9
    Likes Received:
    11
    Reputations:
    5
    Code:
    perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
    
     
  14. ikolla$$

    ikolla$$ Banned

    Joined:
    6 Apr 2008
    Messages:
    80
    Likes Received:
    27
    Reputations:
    5
    Вотйчас просмотрел все твои сообщения которые ты оставил на этом форуме,пришел к выводу, что ты ошибся адресом. У тебя комплексы?В детстве обижали? Человек написал на перле бот,аналогов я еще не видел,а от тебя ниодного полезного сообщения на форуме я не увидел,ты только среш в темах на мой взгляд.Kaimi несколько раз мне помогал,также он помогает новичкам в соответствующих темах, eLWAux тоже не сидит без дела,будь у них быдлокод(как у тебя) онибы не носили цветные ники,и их не уважалибы на античате.
    В общем eLWAux,Kaimi - как говорят сейчас,респект и уважуха,а ты Ил-2 либо жуй пыль которую оставляют они,либо прояви себя и к тебе потянуться. IMHO
    + поставил,огромное спс,скорее всего мне это не пригодиться,разве что для экспериментов.
     
  15. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Угу, советую ещё пару примеров japh с перлмонков скопипастить, чтобы показать крутость...

    Кстати, в твоем коде часто наблюдаю конструкции типа
    die ... unless ....
    Как же такой православный кодер как ты может их использовать, если
    в "библии" пишут:
    * Just because you *CAN* do something a particular way doesn't mean
    that you *SHOULD* do it that way. Perl is designed to give you
    several ways to do anything, so consider picking the most readable
    one. For instance

    open(FOO,$foo) || die "Can't open $foo: $!";

    is better than

    die "Can't open $foo: $!" unless open(FOO,$foo);
     
    _________________________
    2 people like this.
  16. eLWAux

    eLWAux Elder - Старейшина

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    для запуска на ос windows тебе нужен ActivePerl:
    www.activestate.com/store/activeperl/download
    бот не нуждаетса в установке!
     
    3 people like this.
  17. Ил-2

    Ил-2 Banned

    Joined:
    16 Jul 2008
    Messages:
    9
    Likes Received:
    11
    Reputations:
    5
    Kaimi, чуешь в чём соль-то?

    Code:
    #!/usr/bin/perl
    
    use strict;
    use warnings;
    use Benchmark;
    
    my $res = timethese (-10, {
    	'code1' => sub {
    		open my $f, '<', 'file.txt' or die $!;
    		chomp (my @array = <$f>);
    		close $f
    		    },
    	
    	'code2' => sub {
    		die $! unless open my $f, '<', 'file.txt';
    		chomp (my @array = <$f>);
    		close $f
    	}
    });
    
    Code:
    Benchmark: running code1, code2 for at least 10 CPU seconds...
         code1: 13 wallclock secs (10.69 usr +  0.55 sys = 11.24 CPU) @ 97.46/s (n=1095)
         code2: 11 wallclock secs ( 9.55 usr +  0.56 sys = 10.11 CPU) @ 100.21/s (n=1013)
    
    upd: + твоя претензия была не уместна по отношению к тому коду
     
    #17 Ил-2, 19 Jan 2009
    Last edited: 19 Jan 2009
  18. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Неа
     
    _________________________
  19. Ил-2

    Ил-2 Banned

    Joined:
    16 Jul 2008
    Messages:
    9
    Likes Received:
    11
    Reputations:
    5
    Не надо тут нам результаты замеров подделывать
    Code:
    Benchmark: running code1, code2 for at least 10 CPU seconds...
         code1: 11 wallclock secs ( 9.84 usr +  0.41 sys = 10.79 CPU) @ 100.10/s (n=
    1026)
         code2: 12 wallclock secs ( 9.69 usr +  0.52 sys = 10.20 CPU) @ 98.40/s (n=1
    004)
    
     
  20. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Да вот сижу и во всю подделываю, кстати если разбить на отдельные файлы то линукс думает так:
    [root@srv ~]# time perl 1.pl

    real 0m0.011s
    user 0m0.001s
    sys 0m0.010s
    [root@srv ~]# time perl 2.pl

    real 0m0.011s
    user 0m0.000s
    sys 0m0.011s
     
    _________________________