Вопрос Настройка телеграм бота

  • Автор темы Автор темы AmaTo
  • Дата начала Дата начала

AmaTo

Друг форума
Участник
Сообщения
196
Розыгрыши
0
Решения
1
Репутация
5
Реакции
75
Баллы
973
Привет всем. Сделал бота розыграшей, все ок запускается работает, но если выигрывает человек с закрытым профилем, багается конкурс ссылаясь на null профиля человека. Можно ли как то запретить участвовать людям с закрытым профилем или вообще сделать запрет чтобы с закрытым профилем нельзя было вступить в группу?
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'winner_username' cannot be null - тут то понятно что не может записать в бд
Exception in thread "OkHttp Dispatcher" java.lang.NullPointerException
 

Привет всем. Сделал бота розыграшей, все ок запускается работает, но если выигрывает человек с закрытым профилем, багается конкурс ссылаясь на null профиля человека. Можно ли как то запретить участвовать людям с закрытым профилем или вообще сделать запрет чтобы с закрытым профилем нельзя было вступить в группу?
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'winner_username' cannot be null - тут то понятно что не может записать в бд
Exception in thread "OkHttp Dispatcher" java.lang.NullPointerException
Код сохранения в бд?
На каком этапе бот дергает юзера? Конкурс проводится в чате канала, или лично?
 
Код сохранения в бд?
Java:
    private void saveWinner(GAWinner winner, String player) {
        Connect con = null;
        PreparedStatement st = null;
        try {
            con = L2DatabaseFactory.get();
            st = con.prepareStatement("REPLACE INTO ga_winners (ga_id,winner_display_name,winner_userId,winner_username,prize_received,place,received_to) VALUES (?,?,?,?,?,?,?)");
            st.setInt(1, winner.GA_ID);
            st.setString(2, winner.displayName);
            st.setLong(3, winner.userId);
            st.setString(4, winner.username);
            st.setInt(5, winner.received ? 1 : 0);
            st.setInt(6, winner.place);
            st.setString(7, player);
            st.execute();
        } catch (Exception e) {
            _log.warning("could not save GA Winner:" + e);
            e.printStackTrace();
        } finally {
            Close.CS(con, st);
        }
    }

Зависает когда определяет победителя.
Проводится в группе
 
Java:
    private void saveWinner(GAWinner winner, String player) {
        Connect con = null;
        PreparedStatement st = null;
        try {
            con = L2DatabaseFactory.get();
            st = con.prepareStatement("REPLACE INTO ga_winners (ga_id,winner_display_name,winner_userId,winner_username,prize_received,place,received_to) VALUES (?,?,?,?,?,?,?)");
            st.setInt(1, winner.GA_ID);
            st.setString(2, winner.displayName);
            st.setLong(3, winner.userId);
            st.setString(4, winner.username);
            st.setInt(5, winner.received ? 1 : 0);
            st.setInt(6, winner.place);
            st.setString(7, player);
            st.execute();
        } catch (Exception e) {
            _log.warning("could not save GA Winner:" + e);
            e.printStackTrace();
        } finally {
            Close.CS(con, st);
        }
    }
Java:
 public void onCommandMessage(AbstractTelegramBot bot, Update update, Message message, List<String> list) throws TelegramApiException {
        String userName = message.getFrom().getFirstName();
        if (message.getFrom().getUserName() != null) {
            userName = message.getFrom().getUserName();
        }


        if (!createdAdmin.get() && dbUserService.findAll().isEmpty()) {
            if (createdAdmin.compareAndSet(false, true)) {
                if (dbUserService.findById(message.getFrom().getId()) == null) {
                    dbUserService.create(message.getFrom().getId(), userName, 10);
                }
                BotUtil.sendMessage(bot, message, LocalisationService.getString("start.welcomeMessage"), false, false, KeyboardBuilder
                        .inline()
                        .button(LocalisationService.getString("start.buttonCallbackName"), "getBonus:" + message.getFrom().getId())
                        .row()
                        .buttonUrl(LocalisationService.getString("start.buttonUrlName"), LocalisationService.getString("t.me/se1dhe_dev"))
                        .build());

            }
        } else {
            if (dbUserService.findById(message.getFrom().getId()) == null) {
                createdAdmin.set(true);
                dbUserService.create(message.getFrom().getId(), userName, 0);
            }
            BotUtil.sendMessage(bot, message, LocalisationService.getString("start.welcomeMessage"), false, false, KeyboardBuilder
                    .inline()
                    .button(LocalisationService.getString("start.buttonCallbackName"), "getPrize")
                    .row()
                    .buttonUrl(LocalisationService.getString("start.buttonUrlName"), LocalisationService.getString("start.buttonUrlData"))
                    .build());
        }

    }
 
Привет всем. Сделал бота розыграшей, все ок запускается работает, но если выигрывает человек с закрытым профилем, багается конкурс ссылаясь на null профиля человека. Можно ли как то запретить участвовать людям с закрытым профилем или вообще сделать запрет чтобы с закрытым профилем нельзя было вступить в группу?
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'winner_username' cannot be null - тут то понятно что не может записать в бд
Exception in thread "OkHttp Dispatcher" java.lang.NullPointerException
тебе просто нужно брать userName пользователя. Лучше это делать с проверкой, как на примере выше, а именно:

Java:
String userName = message.getFrom().getFirstName();
        if (message.getFrom().getUserName() != null) {
            userName = message.getFrom().getUserName();
        }
т.к. не у всех пользователей установлен @userName
 
Так же, если проводится в группе, то при нажатии на кнопку "участвовать" - нужно проверять юзера на наличие его в бд. если нет - добавлять его в бд и уже после - засовывать его в список участников.
 
Назад
Сверху Снизу