PDA

Просмотр полной версии : [perl] Simple ICQ bot


eLWAux
19.01.2009, 22:42
http://www.mecelectrica.ru/images/icq.gif
простой ICQ бот на perl!, основным достоинством которого является модульность и легкость добавления новых функций.

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

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


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

в config.ini настройки (формат: имя = значение) :
icq сервер:
host == login.oscar.aol.com
порт сервера:
port == 5190

номер админа:
admin == 7434214
пароль для входа в админку:
admin_password == passw
BOT_uin == uin_бота
BOT_password == пароль_uin_бота

логирование (1 - да, 0 - нет):
logging == 1
папка с логами:
log_folder == log\
режим откладки:
DEBUG == 0
папка с логами откладки:
DEBUG_folder == debug\

в plugins.ini список плагинов (в формате: команда;файл):
админка:
!admin;admin.pl
!exit - отключает бота:
!exit;exit.pl
!reboot - перезагрузка ПК:
!reboot;reboot.pl
!shutdown- выключение ПК:
!shutdown;shutdown.pl


написание плагина
любой программист может написать свой плагин для бота, придерживаясь спецификации языка программирования 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
send_msg($_UIN,@_MEST[1]);
на команду: !helloworld testing_my_first_plugin
бот вам ответит: testing_my_first_plugin



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

X-Venom
19.01.2009, 22:48
хороший бот, на перле никогда не встречал

heretic1990
19.01.2009, 23:13
сам писал или основу брал?

eLWAux
19.01.2009, 23:18
сам писал или основу брал?
полностью сам с нуля.

Sharky
19.01.2009, 23:20
заслужил +++++ :) не испытывал, но за старания и кроссплатформенность респект

Ил-2
19.01.2009, 23:30
* Огромные возможности плагинов
* Возможности плагинов ограничены лишь возможностями языка perl

=>

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

eLWAux
19.01.2009, 23:36
*У perl'a огромные возможности
#у этого кода нет
я имел в виду, что можна написать любой нужний плагин, с любими нужними функциями

Kaimi
19.01.2009, 23:37
=>

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

Не надоело везде подобные комментарии писать? Может сам что-нибудь напишешь и выложишь?

heretic1990
19.01.2009, 23:40
полностью сам с нуля.
тогда молоток, лови +
P.S. желаю удачи и дальнейшего развития бота!

Ил-2
19.01.2009, 23:40
Не надоело везде подобные комментарии писать? Может сам что-нибудь напишешь и выложишь?
тебя ткнули лицом в твой быдлокод и ты до сих пор успокоиться не можешь чтоли?)

upd: а может тебя моя фотокарточка раздражает?
^^

Arigona
19.01.2009, 23:40
просто не мог не поставить +. + и даже 2 0.o ну я не богатый =)

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

Kaimi
19.01.2009, 23:46
тебя ткнули лицом в твой быдлокод и ты до сих пор успокоиться не можешь чтоли?)

Ну так что же ты не покажешь всем пример своего православного кода, дабы все восхитились и не обсуждали твое постоянное порицание чужих творений?

Ил-2
19.01.2009, 23:50
perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'

ikolla$$
19.01.2009, 23:51
тебя ткнули лицом в твой быдлокод и ты до сих пор успокоиться не можешь чтоли?)
Вотйчас просмотрел все твои сообщения которые ты оставил на этом форуме,пришел к выводу, что ты ошибся адресом. У тебя комплексы?В детстве обижали? Человек написал на перле бот,аналогов я еще не видел,а от тебя ниодного полезного сообщения на форуме я не увидел,ты только среш в темах на мой взгляд.Kaimi несколько раз мне помогал,также он помогает новичкам в соответствующих темах, eLWAux тоже не сидит без дела,будь у них быдлокод(как у тебя) онибы не носили цветные ники,и их не уважалибы на античате.
В общем eLWAux,Kaimi - как говорят сейчас,респект и уважуха,а ты Ил-2 либо жуй пыль которую оставляют они,либо прояви себя и к тебе потянуться. IMHO
+ поставил,огромное спс,скорее всего мне это не пригодиться,разве что для экспериментов.

Kaimi
19.01.2009, 23:54
perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'

Угу, советую ещё пару примеров 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);

eLWAux
19.01.2009, 23:56
на винде пашет? И возможно его на хосте установить? В этом не шарю, извените за глупые вопросы, учусь..
для запуска на ос windows тебе нужен ActivePerl:
www.activestate.com/store/activeperl/download
бот не нуждаетса в установке!

Ил-2
20.01.2009, 00:28
Kaimi, чуешь в чём соль-то?


#!/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
}
});


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: + твоя претензия была не уместна по отношению к тому коду

Kaimi
20.01.2009, 00:33
Неа

Benchmark: running code1, code2 for at least 10 CPU seconds...
code1: 11 wallclock secs ( 4.53 usr + 5.95 sys = 10.48 CPU) @ 9519.46/s (n
=99802)
code2: 11 wallclock secs ( 5.03 usr + 6.44 sys = 11.47 CPU) @ 8613.53/s (n
=98780)

Ил-2
20.01.2009, 00:37
Не надо тут нам результаты замеров подделывать

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)

Kaimi
20.01.2009, 00:47
Да вот сижу и во всю подделываю, кстати если разбить на отдельные файлы то линукс думает так:
[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

bons
20.01.2009, 00:52
хи, фаллометрия...
По делу: у меня скрипт пишет при запуске после приветствия
Bad arg length for Socket::pack_sockaddr_in, length is 0, should be 4 at /usr/lib/perl/5.8/Socket.pm line 201.
ОС - Debian Linux

Kaimi
20.01.2009, 00:58
И сервер вывод в консоле подделывает(
http://s48.radikal.ru/i120/0901/39/196f5c5d8911.jpg

Все, не буду больше спорить, Ил-2 - бог программирования на Perl, а я вообще не достоин касаться клавиатуры со своими знаниями. В топку программирование, пойду лучше сэмки погрызу и жигуля выпью

Ил-2
20.01.2009, 01:06
пойду лучше сэмки погрызу и жигуля выпью
ога, бывай

eLWAux
03.02.2009, 15:19
'google' парсер
плагин мне стал нужен во время экзамена,
когда в книжке небило теории,
и в телефоне много траффика)

http://s55.radikal.ru/i149/0902/d9/3903546b6454t.jpg (http://radikal.ru/F/s55.radikal.ru/i149/0902/d9/3903546b6454.jpg.html)

Парсер поисковой системи gogo.ru
(аналог google :) )

для установки плагина нужно отредактировать plugins.ini,
и ДОБАВИТЬ там строчку:
!google;google.pl

!gogo <ваш запрос>
в ответ увидете title сайта и ссилку на него!

http://multi-up.com/54936
http://openfile.ru/192253/
http://depositfiles.com/files/0ijxnfv8w
http://rapidshare.com/files/193305656/gogo.zip.html
http://letitbit.net/download/823ac4924150/gogo.zip.html
http://fileshare.in.ua/1841510

biophreak
03.02.2009, 19:09
Проверку на инвиз прикрути, я код тут кидал :) Или в ПМ скину,если надо )

Gaus
19.03.2009, 23:34
Респект! На перле еще не видел!

SAN_i
10.03.2010, 18:59
Здравствуйте, я тоже пишу бота на перле и хочу чтоб отправка сообщений производилась в отдельном потоке. Я создал очередь, поток. Но вот у меня вопрос как мне в этот поток передать переменную $oscar, которую я обьявляю и инициализирую в главном потоке так: $oscar = Net::OSCAR -> new();
Это нужно для того, чтобы отправлять сообщения.

ПС. Использую оскар.

SAN_i
10.03.2010, 19:01
И ещё, скачал ваш архив посмотреть, при распаковке выдаёт кучу ошибок, жалуется на несоотведствие контрольной суммы :(

eLWAux
10.03.2010, 19:56
Здравствуйте, я тоже пишу бота на перле и хочу чтоб отправка сообщений производилась в отдельном потоке. Я создал очередь, поток. Но вот у меня вопрос как мне в этот поток передать переменную $oscar, которую я обьявляю и инициализирую в главном потоке так: $oscar = Net::OSCAR -> new();
Это нужно для того, чтобы отправлять сообщения.

ПС. Использую оскар.
my $oscar:shared = Net::OSCAR -> new();
в потоках должен быть видимый..

И ещё, скачал ваш архив посмотреть, при распаковке выдаёт кучу ошибок, жалуется на несоотведствие контрольной суммы :(
выдаёт кучу ошибок? это проблема архиватора вашего.
несоотведствие контрольной суммы с чем?

wkar
10.03.2010, 20:31
у мну так же выдает что архив битый.

dpawson
18.04.2010, 21:27
архив реально битый... у кого есть бот залейте заново плизз..