Коды 0.4.0
| | |
Alex^_^ | Дата: Вторник, 13.04.2010, 20:04 | Сообщение # 2 |
Administrator
Группа: | Администраторы |
Сообщений: | 770 |
Награды: | 6 |
Репутация: | 1132 |
Статус: | Онлайн |
| присвоение группы с оповещением в общий чат Code /** * !setgroup * @param proc * @param uin * @param v */ public void commandSetgroup(IcqProtocol proc, String uin, Vector v){ if(!isChat(proc,uin) && !psp.testAdmin(uin)) return; if(!auth(proc,uin, "authwrite")) return; try{ String s1 = (String)v.get(1); int id = (Integer)v.get(0); Users uss = srv.us.getUser(id);
if(uss.id!=id){ // proc.mq.add(uin,"Пользователь не найден"); proc.mq.add(uin, Messages.getString("ChatCommandProc.commandSetgroup.0")); return; } if(!testUserGroup(s1)){ // proc.mq.add(uin,"Нет такой группы пользователей"); proc.mq.add(uin, Messages.getString("ChatCommandProc.commandSetgroup.1")); return; } uss.group = s1; boolean f = srv.us.setUserPropsValue(id, "group", s1) && srv.us.setUserPropsValue(id, "grant", "") && srv.us.setUserPropsValue(id, "revoke", ""); srv.us.clearCashAuth(id); if(f) { proc.mq.add(uin, Messages.getString("ChatCommandProc.commandSetgroup.2")); srv.cq.addMsg("Пользователю " + uss.localnick + "[" + uss.id + "], была присвоена группа ["+ srv.us.getUserGroup(uss.id) + "]", "", uss.room); proc.mq.add(uss.sn, "Вам присвоена группа [" + srv.us.getUserGroup(uss.id) + "]" ); } else proc.mq.add(uin, Messages.getString("ChatCommandProc.commandSetgroup.3")); //proc.mq.add(uin,"Произошла ошибка"); } catch (Exception ex){ ex.printStackTrace(); proc.mq.add(uin, Messages.getString("ChatCommandProc.err", new Object[] {ex.getMessage()})); } }
с уважением, Alex^_^ =>жми (-1)
|
|
| |
Alex^_^ | Дата: Вторник, 13.04.2010, 20:06 | Сообщение # 3 |
Administrator
Группа: | Администраторы |
Сообщений: | 770 |
Награды: | 6 |
Репутация: | 1132 |
Статус: | Онлайн |
| пароль на комнату и оповещение из какой в какую комнату ушёл юзер Code /** * !room * @param proc * @param uin * @param v */ public void commandRoom(IcqProtocol proc, String uin, Vector v){ if(!isChat(proc,uin)) return; if(!auth(proc,uin, "room")) return; try{ int i = (Integer)v.get(0); String pass = (String)v.get(1); Users uss = srv.us.getUser(uin); if(uss.room==i){ proc.mq.add(uin,"Ты уже сидишь в этой комнате!"); } else if(qauth(proc,uin, "anyroom") || srv.us.checkRoom(i)){ if (!srv.us.getRoom(i).checkPass(pass) && !psp.testAdmin(uin)) { proc.mq.add(uin,"Не верный пароль!"); return;} srv.cq.addMsg(uss.localnick + " ушел из комнаты [" + uss.room + "] в комнату [" + i + " - " + srv.us.getRoom(i).getName() + "]", uin, uss.room); srv.cq.addMsg(uss.localnick + " ушел из комнаты [" + uss.room + "] в комнату [" + i + " - " + srv.us.getRoom(i).getName() + "]", uin, i); uss.room=i; srv.us.updateUser(uss); srv.cq.changeUserRoom(uin, i); srv.cq.addMsg(uss.localnick + " вошел в комнату [" + uss.room + "]", uin, uss.room); int room = srv.us.getUser(uin).room; Enumeration<String> e = srv.cq.uq.keys(); int cnt=0; while(e.hasMoreElements()){ String g = e.nextElement(); Users us = srv.us.getUser(g); if(us.room==room){ cnt++; } } proc.mq.add(uin,"Ты перешел в комнату " + i + " - " + srv.us.getRoom(i).getName() + (srv.us.getRoom(i).getTopic().equals("") ? "" : ("\nТема: " + srv.us.getRoom(i).getTopic()))+ "\nПользователей в комнате: "+" [" +cnt+ "]"); } else { proc.mq.add(uin,"Такой комнаты не существует! Некуда переходить."); } } catch (Exception ex) { ex.printStackTrace(); proc.mq.add(uin,ex.getMessage()); } }
с уважением, Alex^_^ =>жми (-1)
|
|
| |
Alex^_^ | Дата: Вторник, 13.04.2010, 20:07 | Сообщение # 4 |
Administrator
Группа: | Администраторы |
Сообщений: | 770 |
Награды: | 6 |
Репутация: | 1132 |
Статус: | Онлайн |
| RobAdmin Code /** * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version.
* This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
package ru.jimbot.modules.chat;
import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.ConcurrentHashMap; //import org.pr_dim.jImBot.modules.IcqProc; import java.util.Random;
import ru.jimbot.modules.WorkScript; import ru.jimbot.protocol.IcqProtocol; import ru.jimbot.util.*; import bsh.Interpreter; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.Vector; import java.io.*; import java.text.DateFormat; import java.text.FieldPosition; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.TimeZone; import java.util.concurrent.ConcurrentHashMap; import java.util.Iterator; import ru.jimbot.*; import ru.jimbot.db.*; import ru.jimbot.modules.AbstractCommandProcessor; import ru.jimbot.modules.AbstractServer; import ru.jimbot.modules.Cmd; import ru.jimbot.modules.CommandParser; import ru.jimbot.modules.WorkScript; import ru.jimbot.modules.anek.AnekProps; import ru.jimbot.protocol.IcqProtocol; import ru.jimbot.util.*;
/** * Виртуальный админ в чате * * @author Prolubnikov Dmitry */ public class RobAdmin implements Runnable { public String NICK = "Админ"; public String ALT_NICK="admin;админ"; //Определение зафлуживания админа private String lastSN=""; private long lastTime=0; public int lastCount = 0; private Thread th; int sleepAmount = 1000; long cTime=System.currentTimeMillis(); //Время последнего сообщения, для определения паузы long stTime = 0; //Время последнего вывода статистики public ChatServer srv; public ConcurrentLinkedQueue <MsgElement> mq; public ConcurrentHashMap <String,Integer> uins; ConcurrentHashMap <String,Integer> test1, test2; private String[][] chg = {{"y","у"},{"Y","у"},{"k","к"},{"K","к"},{"e","е"}, {"E","е"},{"h","н"},{"H","н"},{"r","г"},{"3","з"},{"x","х"},{"X","х"}, {"b","в"},{"B", "в"},{"a","а"},{"A","а"},{"p","р"},{"P","р"},{"c","с"}, {"C","с"},{"6","б"}}; private Random r = new Random();
/** Creates a new instance of RobAdmin */ public RobAdmin(ChatServer s) { srv = s; mq = new ConcurrentLinkedQueue(); uins = new ConcurrentHashMap(); uins.put("0",0); test1 = new ConcurrentHashMap(); test2 = new ConcurrentHashMap(); }
/** * Добавление в очередь нового задания */ public void parse(IcqProtocol proc, String uin, String msg, int room){ cTime = System.currentTimeMillis(); mq.add(new MsgElement(msg,uin,proc,room)); }
/** * Замена похожих букв на русские */ public String changeChar(String s){ for(int i=0;i<chg.length;i++){ s = s.replace(chg[i][0],chg[i][1]); } return s; }
private void parse(){ WorkScript.getInstance(srv.getName()).startAdminScript(this); // try { // Interpreter bsh = new Interpreter(); // bsh.set("adm", this); // bsh.eval(WorkScript.getScripts().getScript("./services/" + // srv.getName() + "/scripts/admin.bsh")); // bsh = null; // } catch (Exception ex){ // ex.printStackTrace(); // Log.info(ex.getMessage()); // } }
/** * Обработка событий по времени */ private void timeEvent(){ if(testTime()){ cTime = System.currentTimeMillis(); if(testRnd(ChatProps.getInstance(srv.getName()).getIntProperty("adm.sayAloneProbability"))){ if(srv.cq.uq.size()<=0) return; say(getAlone(), 0); } } }
public void say(String m, int room){ cTime = System.currentTimeMillis(); String s = NICK + ": " + m; Log.info(s); srv.us.db.log(0,"admin","OUT", s, room); srv.cq.addMsg(s,"",room); }
/** * Проверка на мат, вариант 1 */ public boolean testMat1(String msg){ String[] s = msg.trim().split(" "); for(int i=1;i<s.length;i++){ if(!test(s[i], ChatProps.getInstance(srv.getName()).getStringProperty("adm.noMatString").split(";"))){ if(test(s[i], ChatProps.getInstance(srv.getName()).getStringProperty("adm.matString").split(";"))) return true; } } return false; }
/** * Проверка на совпадение слов в сообщении */ public boolean test(String msg, String[] testStr){ for(int i=0;i<testStr.length;i++){ if(msg.toLowerCase().indexOf(testStr[i])>=0) return true; } return false; }
/** * Проверка на наличие имени админа */ public boolean testName(String s){ return test(s,ALT_NICK.split(";")); }
/** * Проверка на наличие приветствия */ public boolean testHi(String s){ String t = "прив;прев;здоров;здрас;здрав;хай;хой;хелл;добр;даро"; return test(s,t.split(";")); } /** * Определение времени запуска бота */ private long getTimeStart(){ long t = 0; try{ File f = new File("./state"); t = f.lastModified(); } catch (Exception ex) { ex.printStackTrace(); } return t; }
private long getUpTime(){ return System.currentTimeMillis()-getTimeStart(); }
private String getTime(long t){ Date dt = new Date(t); DateFormat df = DateFormat.getTimeInstance(DateFormat.MEDIUM); df.setTimeZone(TimeZone.getTimeZone("GMT")); return (t/86400000) + " дней " + df.format(dt); } public boolean testStat(String s){ String t = "stat;стат"; return test(s,t.split(";")); }
public boolean testFlood(String sn){ if(sn.equalsIgnoreCase(lastSN)){ if((System.currentTimeMillis()-lastTime)<ChatProps.getInstance(srv.getName()).getIntProperty("adm.ma xSayAdminTimeout")*60*1000){ return true; } else { lastTime = System.currentTimeMillis(); lastCount = 0; return false; } } else { lastSN = sn; lastTime = System.currentTimeMillis(); lastCount = 0; return false; } }
/** * Вывод статистики по запросу */ public void sayStat(int room){ long test = ChatProps.getInstance(srv.getName()).getIntProperty("adm.getStatTimeout")*60*1000;
if((System.currentTimeMillis()-stTime)<test){ say("Ну вас нафиг... нашли дурака... работай тут, считай... дайте передохнуть хоть немного.", room); return; } stTime = System.currentTimeMillis(); String s = "За последние сутки:\n"; s += "Всего зашло в чат: " + srv.us.statUsersCount(); s += "\nБот запущен: " + new Date(getTimeStart()); s += "\nВремя работы: " + getTime(getUpTime()); s += "\nОтправлено сообщений: " + srv.us.statMsgCount(); s += "\nКикнутых юзеров: " + srv.us.statKickUsersCount(); s += "\nЗарегистрировано пользователей: " + srv.us.statRegCount(); s += "\nВсего киков: " + srv.us.statKickCount(); s += "\nЗабанено юзеров: " + srv.us.statBanUsersCount(); s += "\nСамые болтливые пользователи:\n" + srv.us.statUsersTop(); say(s, room); }
/** * Проверка на первышение интервала ожидания */ public boolean testTime(){ return (System.currentTimeMillis()-cTime)>ChatProps.getInstance(srv.getName()).getIntProperty("adm.sayAloneTime")*60000; }
public int getRND(int i){ return r.nextInt(i); }
/** * Событие с вероятностью 1/i */ public boolean testRnd(int i){ if(i<=1) return false; else return r.nextInt(i)==1; }
/** * Приветствие */ public String getHi(String name){ String[] s = {"Привет","Хай","Приветствую","Здравствуй","Здоров"}; return s[getRND(s.length)] + " " + name + "!"; }
/** * Фразы про одиночество */ public String getAlone(){ String[] s = { "Здесь так тихо...", "Ну и чего все замолчали?", "Ну и молчите дальше, я тоже буду молчать :-\\", "Алле! тут есть кто-нибудь? А-а-а-а!!! Я что тут один?!" }; return s[getRND(s.length)]; }
/** * Фразы при упоминении админа */ public String getAdmin(){ String[] s = { "А, че?", "хр-р-р... хр-р-р...", "Опять про то же самое?", "Не о чем больше поговорить?", "А с тобой я ваще больше не разговариваю", "Ты о своем, а я о своем", "Не, я так не думаю", "Ты серьезно?", "С тобой так интересно!", "Ха-ха, очень смешно...", "Если ты высокого мения о своем интеллекте, то должен тебя разочаровать" }; return s[getRND(s.length)]; }
public void start(){ th = new Thread(this); th.setPriority(Thread.NORM_PRIORITY); th.start(); }
public synchronized void stop() { th = null; notify(); }
public void run() { Thread me = Thread.currentThread(); while (th == me) { parse(); timeEvent(); try { th.sleep(sleepAmount); } catch (InterruptedException e) { break; } } th=null; } }
с уважением, Alex^_^ =>жми (-1)
|
|
| |
Alex^_^ | Дата: Вторник, 13.04.2010, 20:07 | Сообщение # 5 |
Administrator
Группа: | Администраторы |
Сообщений: | 770 |
Награды: | 6 |
Репутация: | 1132 |
Статус: | Онлайн |
| Должен исключать антикик для testAdmin при длительном молчании. Code /** * Проверка молчунов * @param uin */
public void testState(String uin){ if(psp.testAdmin(uin)) return; long t = floodMap.get(uin).getDeltaTime(); if(t>(psp.getIntProperty("chat.autoKickTimeWarn")*60000) && !warnFlag.contains(uin)){ Log.info("Warning to " + uin); srv.getIcqProcess(srv.us.getUser(uin).basesn).mq.add(uin,"Предупреждение!\nПредупреждение!\nПредупреждение!\n\nВы слишком долго молчите и будете удалены из чата! Не молчите!"); warnFlag.add(uin); } if(t>(psp.getIntProperty("chat.autoKickTime")*60000)){ Log.talk("Autokick to " + uin); warnFlag.remove(uin); kick(srv.getIcqProcess(srv.us.getUser(uin).basesn),uin); } }
с уважением, Alex^_^ =>жми (-1)
|
|
| |
|
Новые темы |
19:11 Ответов: 28 Автор: ICE Раздел: ICQ 23:55 Ответов: 2 Автор: Vlad Раздел: Mail |
|
Горячие темы |
19:11 Ответов: 28 Автор: ICE Раздел: ICQ |
|
Активные пользователи |
| ICE Сообщений: 129 | | | | | | | |
|
|
|
Новые пользователи на сайте |
|
|
|