import ru.jimbot.modules.AbstractServer;
import ru.jimbot.util.*;
import ru.jimbot.modules.chat.*;
import ru.jimbot.modules.*; \\ это так называемая "библиотека"... по которым скрипт проникает в исходник чат-бота и синхронизирует команды. При чём если команда
совпадает с командой в исходнике, скрипт замещает эту самую команду. и если вы не уверены всегда делайте резервную копию
чата так как "баговый" скрипт иногда может поразить исходник чата.
//Установка скрипта как обработчика команды
if(in.equals("install")){
cmd.addCommand("!чат", new Cmd("!чат","",39,name));
cmd.addCommand("!ч", new Cmd("!ч","",39,name));
cmd.addCommand("!chat", new Cmd("!chat","",39,name));
cmd.addCommand("!вход", new Cmd("!вход","",39,name));
cmd.addCommand("!enter", new Cmd("!enter","",39,name));
cmd.addAuth("room","Переход по комнатам"); \\ Здесь задаётся названи/описание к комнаде, которая будет отображатся в админке с ботом в резделе "полномочия"
out="Ok";
return;\\ это команда служит для блокировкм потока и прерывание к началу команды скрипта
}
\\ Здесь происходит установка команды в парсер команд чата. тут всё очень просто.
для добавлении альтернативы к командам, копируем и вставляем ниже строку и меняем на свою команду где выделенокрасным цветом
.... cmd.addCommand("!enter", new Cmd("!enter","",39,name));
Выделенное выше, синим это как правило номер команды в парсере команд в исходнике. как правило для скриптов это 39
// Проверим полномочия
//if(!cmd.isChat(proc,uin) && !cmd.psp.testAdmin(uin)) return;
//if(!cmd.auth(proc,uin, "roomgo")) return;
Выделенное зеленым, описывает проверку полномочий данного названия
try \\ указывается основа команды
{ \\ а это условие означает о начале структуры скрипта
(P.S. всегда сделите за тем чтобы({) закрывался при окончании задаваемог условия (}))
String MESSAGE = "Добро пожаловать в <+[BeSt][cHaT]+>!*YAHOO*\n";
\\\описываюкоманду:
String - это команда которая даёт вывести текст
MESSAGE - задаётся название команды
\\\ текст должен быть обезательно в скобках = "Добро пожаловать в <+[BeSt][cHaT]+>!*YAHOO*\n";
\n - обозначает отступ на новую строчку
<;> - точка с запятой означает что к данная область команды завершена
String MESSAGE2 = " вошёл(а) в чат*HI*Поприветствуем!!*DANCE*";
Users uss = cmd.srv.us.getUser(uin)
cmd.srv.us.getUser(uin) - это условие означает пользователя непосредственно "ТОГО кто зашёл"
boolean f = false;\\ ну это вам поеп не надо) означает условие подкоманды, в данном случает если производная F - "отрицательная" так скажем "плохое" значение
if(uss.localnick==null|| uss.localnick.equals("")|| uss.state==UserWork.STATE_NO_REG)
\\ || - обозначает тоже самое что ИЛИ , И
{
proc.mq.add(uin, "*STOP*Сначала зарегайся*YEs*командой !рег или !reg, например: !рег Пушистый \nДля входа в чат используйте команду !чат или !вход;-)\n(P.S. Благодарим что вы зарегились у нас:-) теперь если вы будете у нас часто у вас будет автоматически повышаться рейтинг;-))");
return;
}
proc.mq.add - уоманда отправки сообщения
proc.mq.add(uin, "...."); - это отправка пользователю который ввел команду
if(uss.localnick==null || uss.localnick.equals("") || uss.state==UserWork.STATE_CHAT) {
proc.mq.add(uin, "Вы уже в чате;-)");
return;
}
\\uss.localnick - это ник того кто ввел команду... п.с.
Если uss. - было установлено как Users uss = cmd.srv.us.getUser(uin)
if (uss.state==UserWork.STATE_CHAT) return; //Юзер уже в чате
if (uss.state==UserWork.STATE_NO_CHAT) {
Log.info("Add contact " + uin);
if(proc.isNoAuthUin(uin)) proc.mq.add(uin, "Чтобы бот видел ваш статус - авторизуйте его!:-)", 2);
proc.addContactList(uin);
uss.state = UserWork.STATE_CHAT;
uss.basesn = proc.baseUin;
cmd.srv.us.updateUser(uss);
// Меняем ник если не надо стереть.
String nick = uss.localnick.replace(" ","");
String oldNick = uss.localnick;
uss.localnick=nick;
cmd.srv.us.updateUser(uss);
String nick = uss.localnick + " ";
String oldNick = uss.localnick;
uss.localnick=nick;
cmd.srv.us.updateUser(uss);
cmd.srv.us.db.event(uss.id, uin, "REG", 0, "", nick);
if(uss.ball==-1)
{
int newball = uss.ball+1;
uss.ball=newball;
cmd.srv.us.updateUser(uss);
}
if(uss.country==-1)
{
int newcountry = uss.country+1;
uss.country=newcountry;
cmd.srv.us.updateUser(uss);
}
int newbirthmonth = uss.birthmonth=100;
uss.birthmonth=newbirthmonth;
cmd.srv.us.updateUser(uss);
int newbirthyear = uss.birthyear=0;
uss.birthyear=newbirthyear;
cmd.srv.us.updateUser(uss);
if(uss.age==-1)
{
int newage = uss.age+1;
uss.age=newage;
cmd.srv.us.updateUser(uss);
}
if(uss.language==-1)
{
int newlanguage = uss.language+1;
uss.language=newlanguage;
cmd.srv.us.updateUser(uss);
}
\\ Vector v - это начало установки массива команды, которая заносится опять же в парсер
Vector v = cmd.getParser().parseArgs(msg);
String lstatus = "В сети";
Users us = cmd.srv.us.getUser(uin);
File Persona = new File ("./UXstatus/"+us.id+".txt");
if (Persona.exists()) Persona.delete();
OutputStreamWriter ow = new OutputStreamWriter(new FileOutputStream("./UXstatus/"+us.id+".txt",true),"windows-1251");
ow.write(lstatus);
ow.close();
Enumeration e = cmd.srv.cq.uq.keys();
int cnt=0;
int cnl=0;
while(e.hasMoreElements()){
String i = e.nextElement();
Users us = cmd.srv.us.getUser(i);
cnt++;
if(us.room==room){
String g = cmd.srv.us.getUserGroup(us.id);
String ss = "";
File Persona = new File ("./UXstatus/"+us.id+".txt");
if (Persona.exists()){
ss += " (" + cmd.psp.loadText("./UXstatus/"+us.id+".txt");
ss=ss.replace('\n',')');
}
cnl++;
switch (g){
}
}
}
Vector v = cmd.getParser().parseArgs(msg);
Users us = cmd.srv.us.getUser(uin);
File p = new File("./ads/"+us.id+".txt");
if (p.exists())
{
String time = "";
BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream("./ads/"+us.id+".txt"),"windows-1251"));
time += r.readLine();
r.close();
\\ if - указывает значение "ЕСЛИ"
if(System.currentTimeMillis()-(Long.parseLong(time))>21600000)
{
{
int newgender = us.ball+1;
us.gender=newgender;
int newcountry = us.country+1;
us.country=newcountry;
cmd.srv.us.updateUser(us);
}
}
}
if (p.exists()) p.delete();
long time = System.currentTimeMillis(); \\ запись времни в лог бота
String ttt = Long.toString(time); \\ вод текста который сохранится
OutputStreamWriter file = new OutputStreamWriter(new FileOutputStream("./ads/"+us.id+".txt",true),"windows-1251"); \\ код о создании нового файла в заданной дерриктории, где (+us.id+) - указывает о порядковом номере пользователя ID
file.write(ttt); \\ запись в файл
file.close(); \\ выход из файла
cmd.srv.cq.addMsg(uss.localnick + " ["+cmd.srv.us.getUserGroup(cmd.srv.us.getUser(uin).id)+"]" + MESSAGE2, uss.sn, uss.room);
proc.mq.add(uin,MESSAGE);
proc.mq.add(uin," > ваш ник ~ [" + uss.localnick.replace("["+uss.id+"] ~ ","")+ "]\n" + " > ваш ЮиН ~ [" + uin + "]\n" + " > ваш ID ~ ["+uss.id+"]\n" + " > ваша группа ~ ["+cmd.srv.us.getUserGroup(cmd.srv.us.getUser(uin).id)+"]\n" + " > ваш статус ~ [" + lstatus + "]\n" + " > ваш рейтинг ~ ["+ uss.country +"%]\n" +" > ваш баланс ~ ["+ uss.ball +" $ золотых]\n" + " > вы сейчас в Комнате ~ [" + uss.room + " - " + cmd.srv.us.getRoom(uss.room).getName() + "] \n" + " > тема текущей комнаты ~ [" + cmd.srv.us.getRoom(uss.room).getTopic() + "]\n" + " > пользователей в чате ~ ["+ cnt + "]\n" + " > за сутки зашло в чат ~ ["+ cmd.srv.us.statUsersCount() +"]\n" + " > всего зарегано ~ ["+ Integer.toString(cmd.srv.us.count()) +"]\n" + "Для более подробных данных введите !баланс");
f = true;
}
if (uss.state==UserWork.STATE_OFFLINE) {
uss.state = UserWork.STATE_CHAT;
uss.basesn = proc.baseUin;
cmd.srv.us.updateUser(uss);
proc.mq.add(uin,uss.id);
if(cmd.psp.getBooleanProperty("chat.showChangeUserStatus"))
cmd.srv.cq.addMsg(uss.localnick + MESSAGE2, uss.sn, uss.room);
}
Log.talk(uss.localnick + MESSAGE2); \\ Здесь идёт запись в лог ссобщения MESSAGE2
cmd.srv.us.db.log(uss.id,uin,"STATE_IN",uss.localnick + MESSAGE2,uss.room);
cmd.srv.us.db.event(uss.id, uin, "STATE_IN", 0,"",uss.localnick + MESSAGE2);
cmd.srv.cq.addUser(uin,proc.baseUin, uss.room);
if(f){
File acu = new File ("./AutoUin.txt");
if (!acu.exists())
{
if(cmd.srv.us.getCurrUinUsers(uss.basesn)>cmd.psp.getIntProperty("chat.maxUserOnUin")){
proc.mq.add(uin,"Данный номер слишком загружен, вы будете автоматически переведены на ближайший свободный номер.");
String s = cmd.srv.us.getFreeUin();
uss.basesn = s;
cmd.srv.us.updateUser(uss);
cmd.srv.cq.changeUser(uin, s);
proc.mq.add(uin,";-)Сообщения теперь будут приходить с номера " + s);
}
}
else \\ Условие "Иначе" или как "В остальных случаях"
{
proc.mq.add(uin,"Вы будете автоматически переведены на ближайший свободный номер.;-)");
String s = cmd.srv.us.getFreeUin();
uss.basesn = s;
cmd.srv.us.updateUser(uss);
cmd.srv.cq.changeUser(uin, s);
proc.mq.add(uin,";-)Сообщения теперь будут приходить с номера " + s);
}
}
\\ далее идёт обезательный тег для скрипта который сообит об ошибке в команде
} catch (Exception ex) {
ex.printStackTrace();
proc.mq.add(uin,ex.getMessage());
}