1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.

Регистрация за SMS

Тема в разделе "Дополнения для Jimbot", создана пользователем cerber, 22 фев 2015.

  1. TopicStarter Overlay
    cerber

    cerber Местный инквизитор Команда форума

    Регистрация:
    25.02.11
    Сообщения:
    8.445
    Симпатии:
    2.783
    Баллы:
    575
    Пол:
    Мужской
    Адрес:
    АДА
    автор - REDOSS
    Инструкция:
    1) заменить команду.
    2) вывести в админку.
    3) Cделать запрос в БД + создать пароли.
    4) убрать галочку "свободная регистрация", если не убрать, то регистрация будет простой.
    ВНИМАНИЕ

    Если уины админов стоит в админских номерах, то регистрация проходит без пароля.
    ChatCommandProc
    Код:
    /**
         * !reg - регистрация
         * @author REDOSS
         * @param proc
         * @param uin
         * @param v
         */
        public void commandReg(IcqProtocol proc, String uin, Vector v, String mmsg) {
            try {
                boolean twoPart = false;
                if(srv.getProps().getBooleanProperty("chat.useCaptcha") && comMap.containsKey(uin)) {
                    if(comMap.get(uin).getMsg().equalsIgnoreCase(mmsg)) {
                        twoPart=true;
                        v = comMap.get(uin).getData();
                        comMap.remove(uin);
                    } else {
                        proc.mq.add(uin,"Вы неправильно ответили на проверочный вопрос, попытайтесь зарегистрироваться еще раз");
                        comMap.remove(uin);
                        return;
                    }
                }
                int maxNick = psp.getIntProperty("chat.maxNickLenght");
                String lnick = (String)v.get(0);
                Users uss = srv.us.getUser(uin);
                if(lnick.equals("")) {
                    proc.mq.add(uin,"Ошибка регистрации, пустой ник");
                    return;
                }
                if(lnick.length()>maxNick) {
                    lnick = lnick.substring(0,maxNick);
                    proc.mq.add(uin,"Предупреждение!" +
                            "\nПредупреждение!" +
                            "\nПредупреждение!\n" +
                            "\nВаш ник слишком длинный и будет обрезан");
                }
                if(!testNick(uin,lnick)) {
                    proc.mq.add(uin,"Ошибочный ник, попытайтесь еще раз");
                    return;
                }
                lnick = lnick.replace('\n',' ');
                lnick = lnick.replace('\r',' ');
                if(psp.getBooleanProperty("chat.isUniqueNick") && !qauth(proc,uin,"dblnick") && !psp.testAdmin(uin))
                    if(srv.us.isUsedNick(lnick)) {
                        proc.mq.add(uin,"Такой ник уже существует\nПопробуйте другой ник");
                        return;
                    }
                String oldNick = uss.localnick;
                if(uss.state!=UserWork.STATE_NO_REG) {
                    if(!auth(proc,uin, "reg")) return;
                    if(uss.state!=UserWork.STATE_CHAT) return;
                    if(srv.us.getCountNickChange(uss.id)>psp.getIntProperty("chat.maxNickChanged")) {
                        proc.mq.add(uin,"Вы исчерпали свой суточный лимит\nПопробуйте поменять ник через сутки");
                        return;
                    }
                    if(oldNick.equals(lnick)) {
                        if(uss.state==UserWork.STATE_NO_CHAT)
                            proc.mq.add(uin,"Ник не изменен\nДля входа в чат используйте команду !чат");
                        else
                            proc.mq.add(uin,"Ник не изменен");
                        return;
                    }
                    uss.localnick = lnick;
                    proc.mq.add(uin,"Обновление вашего ника успешно завершено");
                    srv.cq.addMsg("Пользователь " + oldNick + " сменил ник на " + lnick, "", uss.room); //Сообщение для всех
                    srv.us.db.log(uss.id,uin,"REG",lnick,uss.room);
                    srv.us.db.event(uss.id, uin, "REG", 0, "", lnick);
                    uss.basesn = proc.baseUin;
                    srv.us.updateUser(uss);
                    return;
                }
                if(!testNick(uin,lnick)) {
                    proc.mq.add(uin,"Это запрещенный ник, пожалуйста попробуйте другой ник");
                    return;
                }
                if(psp.getBooleanProperty("chat.FreeReg") || psp.testAdmin(uin)) {
                    if(srv.getProps().getBooleanProperty("chat.useCaptcha") && !twoPart) {
                        String s = getCaptcha();
                        proc.mq.add(uin,"Для подтверждения того что вы человек, напишите ответ на несложный пример\nВремя на раздумье 5 минут (перед ответом учите общую паузу для сообщений): " + s.split("=")[0] + "=");
                        comMap.put(uin, new CommandExtend(uin, mmsg, s.split("=")[1],v, 5*60000));
                        return;
                    }
                    uss.state=UserWork.STATE_NO_CHAT;
                    uss.basesn = proc.baseUin;
                    uss.localnick = lnick;
                    int id = srv.us.addUser(uss);
                    proc.mq.add(uin, "", 1);
                    srv.us.db.log(id,uin,"REG",lnick,uss.room);
                    srv.us.db.event(id, uin, "REG", 0, "", lnick);
                    proc.mq.add(uin,"Регистрация завершена, вход в чат по команде !чат");
                    return;
                }
                String pass = (String)v.get(1);
                int num = 0;
                if(pass.equals("")) { // проверка пустои пароль или нет
                    String z = psp.getStringProperty("sms.null.pass");
                    z = z.replace("<br>", "\n");
                    proc.mq.add(uin, z);
                    return;
                }
                PreparedStatement reg = (PreparedStatement) srv.us.db.getDb().prepareStatement("SELECT `id` FROM registration WHERE `txt` = ?  ");
                reg.setString(1,pass);
                ResultSet result = reg.executeQuery();
                if(result.next()) {
                    num = result.getInt(1);
                } else {
                    String w = psp.getStringProperty("sms.error.pass"); // Проверка верный пароль или нет
                    w = w.replace("<br>", "\n");
                    proc.mq.add(uin, w);
                    return;
                }
                result.close();
                reg.close();
                if(srv.getProps().getBooleanProperty("chat.useCaptcha") && !twoPart) {
                    String s = getCaptcha();
                    proc.mq.add(uin,"Для подтверждения того что вы человек, напишите ответ на несложный пример\nВремя на раздумье 1 минута: " + s.split("=")[0] + "=");
                    comMap.put(uin, new CommandExtend(uin, mmsg, s.split("=")[1],v, 60000));
                    return;
                }
                uss.state=UserWork.STATE_NO_CHAT;
                uss.basesn = proc.baseUin;
                uss.localnick = lnick;
                int id = srv.us.addUser(uss);
                proc.mq.add(uin, "", 1);
                proc.mq.add(uin,"Регистрация завершена, вход в чат по команде !чат");
                srv.us.db.log(id,uin,"REG",lnick, uss.room);
                srv.us.db.event(id, uin, "REG", 0, "", lnick);
                String s = "DELETE FROM registration WHERE id="+num+" LIMIT 1";
                PreparedStatement reg1 = (PreparedStatement) srv.us.db.getDb().prepareStatement(s);
                reg1.execute();
                reg1.close();
            } catch (Exception ex) {
                ex.printStackTrace();
                proc.mq.add(uin, "Ошибка: " + ex.getMessage());
            }
        }
    ChatProps
    Код:
    setStringProperty("sms.null.pass","Пустой пароль<br>Для получения пароля, отправьте SMS сообщение");
    setStringProperty("sms.error.pass","Неверный пароль<br>Для получения пароля, отправьте SMS сообщение");
    
    new UserPreference(UserPreference.STRING_TYPE,"sms.null.pass","Ответ на сообщение, если пустой пароль",getStringProperty("sms.null.pass")),
    new UserPreference(UserPreference.STRING_TYPE,"sms.error.pass","Ответ на сообщение, если неверный пароль",getStringProperty("sms.error.pass")),
    SQL запрос
    Код:
    --
    -- Структура таблицы `registration`
    --
    
    CREATE TABLE `registration` (
      `id` int(11) NOT NULL auto_increment,
      `txt` char(30) NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=50001 ;
    
    --
    -- Дамп данных таблицы `registration`
    --
    
    INSERT INTO `registration` VALUES (1, '3715229140');
    INSERT INTO `registration` VALUES (2, '4595445237');
    INSERT INTO `registration` VALUES (3, '0002942515');
    P.S. опять таки замечу от себя,код работал без глюков.....
  2. TopicStarter Overlay
    cerber

    cerber Местный инквизитор Команда форума

    Регистрация:
    25.02.11
    Сообщения:
    8.445
    Симпатии:
    2.783
    Баллы:
    575
    Пол:
    Мужской
    Адрес:
    АДА
    автор - nek
    авторское описание
    Код:
    Регистрация за SMS.
    
    Возможности:
    1. Регистрация за sms
    2. Разбан за sms (в этой версии не доступно)
    3. Модератор за смс
    4. Ведение логов
    5. Ответ абоненту.
    6. Узнавание ника пользователя
    
    Принцып работы:
    1. В админке сервиса убираем галочку с пункта Свободная регистрация.
    2. Перезагружаем чат
    3. В статусе, или где вам угодно пишем как слать смс, куда , с чем и т.д.
    4. В панели sms биллинга (скрипт заточен под а1а) прописываем адрес вашего скрипта обработчика
    5. Пользователь шлет sms со своей аськай на короткий номер, получает пароль.
    6. Пользователь регистрируется в чате !reg nickname password(password - полученный им в сообщении пароль)
    7. ...
    8. PROFIT!
    
    Настройка:
    Для работы данного скрипта необходим настроенный http сервер и php.
    Перед началом работы выполните sql скрипт из директории sql.
    Данный скрипт изменит поле id в таблице invites на автоинкрементное.
    По умолчанию в примере обработчика (examples/registration.php)
    настройки подключения берутся из файла настроек вашего чата.
    $sms->initConnect('xml', '/home/java/jImBot/services', 'ChatBot');
    Первый параметр xml указывает что настройка берется из %servicename%.xml
    Второй параметр указывает путь до директории сервисов.
    Третий параметр указывает имя сервиса.
    Исправьте данные параметры под свои нужды.
    Далее измените директиву password в секции [sms] в файле config/smsaction.ini
    на свой пароль сервиса в sms биллинге.
    Закачайте файлы на хостинг, вне директории document_root вашего хостинга(так безопаснее).
    Переместите registration.sms в documebt_root вашего http-сервера, и измените путь подключения класса SmsAction
    на свой (require_once('/path/to/SmsAction.php'))
    В панели sms биллинга указываем адрес обработчика и пароль сервиса.
    Наслаждаемся.
    
    Предупреждение:
    Настоятельно рекомендую протестировать на "кошках" а не на боевых чатах.

    Вложения:

    • smsaction.zip
      Размер файла:
      13,9 КБ
      Просмотров:
      0
    Xpert™ нравится это.
  3. Globus

    Globus Пользователь

    Регистрация:
    05.05.11
    Сообщения:
    108
    Симпатии:
    18
    Баллы:
    45
    Пол:
    Мужской
    Род занятий:
    JimBot, PHP, HTML
    Адрес:
    г.Новозыбков
    ICQ:
    899604
    В скрипте автора - nek упомянуто что скрипт заточен под а1а, но к сожалению а1а прекратил работу с физическими лицами, сам несколько лет пользовался данным сервисом, теперь все....
  4. alex_xpert

    alex_xpert Местный надзиратель Команда форума

    Регистрация:
    10.09.11
    Сообщения:
    893
    Симпатии:
    318
    Баллы:
    575
    Пол:
    Мужской
    Адрес:
    Бугуруслан
    VK:
    alex_xpert
    ICQ:
    6210725
    Skype:
    alex_xpert
    Значит придется подгонять под другой смс-сервис.

Поделиться этой страницей