Bot Wars

Część z Was wie, że jakiś czas temu obiecałem że jak zacznę robić nowszego bota to udostępnię kod źródłowy starszej wersji. Zacząłem robić nowego bota, więc wiecie co to oznacza ;)
Jak to się wszystko zaczęło?
Zdaje się dwa lata temu zacząłem uważniej przyglądać się działaniu PPE i szukać błędów w stronie tak by dostarczyć ekipie magazynu trochę wytycznych jak moga sobie lepiej zabezpieczyć i zoptymalizować serwis - dzięki temu programista ppe i Perez mieli wiele nieprzespanych nocek i rzucili zapewne nie jedną ku*wą w powietrze (pozdrówka chłopaki! :P).
Przy okazji swoich prac zacząłem sobie pisać skrypty automatyzujące testy, które robiły różne dziwne rzeczy - przez co nawet kiedyś zaliczyłem bana jak test się powódł zbyt dobrze, oraz zalogowałem się na koncie Perez'a (niestety posiałem screenshota) :D
Przy okazji tworzenia tych skryptów stwierdziłem że jeden (bardzo prosty skrypt) odrobinkę rozbuduje i zrobię z niego głupkowatego bota i tak też się stało.
Co się działo z botem i co się będzie dziać?
Kiedyś ten prosty pierwszy bot działał jako najprostrzy javascript, który był wywołany z konsoli przeglądarki, póxniejsze wersje coraz mniej korzystały z przeglądarki aż w końcu stały się kompletnie backendowe. Docelowo kiedyś zobaczycie bota zintegorwanego z shoutem na stałe ;)
Dasz nam bota? Serio?
Serio, serio! Poniżej jest kod źródłowy jednej z wcześniejszych wersji bota który możecie sobie dowolnie zmodyfikować i dzięki temu będziecie mieli swojego własnego bota który będzie odpowiadał na shoucie w Waszym imieniu :)
Co trzeba zrobić żeby go uruchomić i zacząć się nim bawić?
Skrypt możecie dowolnie zmodyfikować przed uruchomieniem, jeśli popełnicie błąd skrypt się po prostu nie uruchomi więc kombinujcie :D
Aby uruchomić swojego własnego bota należy wykonać kilka prostych czynności:
1. Zaloguj się na PPE.pl
2. Wejdź na shouta
3. Naciśnij na klawiaturze klawisz F12
Zobaczycie coś takiego:
4. Trzeba kliknąć w zakładkę "konsola" lub "console" w zależnbości od wersji językowej systemu jaki macie a następnie zaznaczyć poniższy kod, skopiować (CTRL + C) i wkleić w te konsole (CTRL + V), a na końcu nacisnąć ENTER.
5. Jeśli wszystko zadziałało, w konsoli przewinie się ściana tekstu i bot zacznie działać, jeśli coś będzie nie tak zobaczycie czerwony komunikat z błędem.
I tyle, teraz możecie na shoucie napisać jakąś komendę i bot na nią powinien zareagować po chwili.
A jak wyłączyć bota?
Po prostu zamknij karte przeglądarki z shoutem - prościej się nie da ;)
A po co to wszystko?
Zmodyfikujcie skrypt zróbcie swoje boty i niech sobie trochę powalczą na shoucie, let the fight begin! :D
Kod bota
console.clear();
cmd=[];
banned_users=['Sephiro 2.0','Binioll']; //tym userom bot nie odpowiada na komendy
commands= { //tu jest zestaw slow kluczowych na jakie bot reaguje, mozna sobie dopisywac swoje wlasne - nie trzeba stosowac nomenklatury ukosnakreska i slowo "/cośtam" moze to byc dowolny ciag znakow
'/cycki': {
users: [],
response: '( 。 ㅅ 。 )'
},
'/foczka': {
users: [],
response: 'ᶘ ᵒᴥᵒᶅ'
},
'/nintendo': {
users: [],
code: function(cuser, cmessage, cid) {
cmd.push(cuser+' - Switch OFF!');
}
},
'/psx': {
users: [],
code: function(cuser, cmessage, cid) {
cmd.push(cuser+' - 4TheFrajers, co nie? :P');
}
},
'/sony': {
users: [],
code: function(cuser, cmessage, cid) {
cmd.push(cuser+' - 4TheFrajers, co nie? :P');
}
},
'/xbox': {
users: [],
code: function(cuser, cmessage, cid) {
cmd.push(cuser+' - ha! Sony osrane! :D');
}
},
'/microsoft': {
users: [],
code: function(cuser, cmessage, cid) {
cmd.push(cuser+' - ha! Sony osrane! :D');
}
},
'/playstation': {
users: [],
code: function(cuser, cmessage, cid) {
cmd.push(cuser+' - 4TheFrajers, co nie? :P');
}
},
'/telewizor': {
users: [],
code: function(cuser, cmessage, cid) {
cmd.push(cuser+' - na telewizorze gram przecież nie mam tv 4k mam panasonica full HD');
}
},
}
//od tego miejsca nic nie ruszaj bo zepsujesz ;p
function grabShout(last_post_id)
{
start_scr = new Date();
cmd=[];
var max_id=last_post_id,
resp_arr=[];
$.each($('#chat-table table'),function(idx,row) {
id=$(this).find('td.message span[id^=span-]').attr('id');
id=id.substr(5);
user=$(this).find('td.avatar a').text();
message=$(this).find('td.message span[id^=span-]').html();
time=$(this).find('div.p_right').attr('title');
resp_arr.push({id:id,user:user,message:message,time:time});
});
resp_arr=resp_arr.reverse();
$.each(resp_arr,function(idx,row) {
if(row.id>max_id)
{
var usr_msg=row.message;
usr_msg=usr_msg.trim();
max_id=row.id;
if($.inArray(row.user,banned_users)<0)
{
if(commands[usr_msg])
{
if(commands[usr_msg]['users']=='' || $.inArray(row.user,commands[usr_msg]['users'])>=0)
{
if(commands[usr_msg]['code']!=undefined)
{
commands[usr_msg].code(row.user,usr_msg,row.id);
}
else
{
cmd.push(usr_msg);
}
}
}
}
}
});
$.each(cmd,function(idx,row) {
if(commands[row])
{
sendMessage(commands[row]['response']);
}
else
{
sendMessage(row);
}
});
setTimeout(function (){ grabShout(max_id); }, 2000);
}
function sendMessage(msg)
{
var step=300,
delay_step=100,
total_len=msg.length,
message='',
messages=[],
loop_idx=0;
if(total_len>0)
{
if(total_len
postMessage(msg);
}
else
{
for(i=0;i<=total_len;i=i+step)
{
message=msg.substr(i,step);
if(message.length>0)
{
messages.push(message);
}
}
for(i=0;i
postMessage(messages[i],(delay_step*i));
}
}
}
}
function postMessage(msg,send_delay)
{
if(typeof(send_delay)==undefined)
{
send_delay=0;
}
if(msg.length>0)
{
if(send_delay==0)
{
$.ajax({
type:'POST',
url:'http://www.ppe.pl/ajax/add_chat.html',
data:{ 'chat-message': msg }
});
}
else
{
setTimeout(function (){ $.ajax({ type:'POST', url:'http://www.ppe.pl/ajax/add_chat.html', data:{ 'chat-message': msg } }); }, send_delay);
}
}
}
function matchInArray(string, expressions)
{
var len=expressions.length;
for (i=0; i
if (string.match(expressions[i]))
{
return expressions[i];
}
}
return false;
};
//bot starting sequence
last_post_id=2953512;
if(last_post_id>2244867)
{
setTimeout(function (){ grabShout(last_post_id); }, 1000);
}