
02.05.2023, 20:14
|
|
Участник форума
Регистрация: 25.06.2019
Сообщений: 219
С нами:
3624517
Репутация:
105
|
|
Привет всем. Сделал бота розыграшей, все ок запускается работает, но если выигрывает человек с закрытым профилем, багается конкурс ссылаясь на null профиля человека. Можно ли как то запретить участвовать людям с закрытым профилем или вообще сделать запрет чтобы с закрытым профилем нельзя было вступить в группу?
Сообщение от Спойлер
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityCons traintViolationException: Column 'winner_username' cannot be null - тут то понятно что не может записать в бд
Exception in thread "OkHttp Dispatcher" java.lang.NullPointerException
|
|
|

02.05.2023, 20:20
|
|
Новичок
Регистрация: 16.03.2019
Сообщений: 0
С нами:
3769794
Репутация:
0
|
|
Сообщение от AmaTo
Привет всем. Сделал бота розыграшей, все ок запускается работает, но если выигрывает человек с закрытым профилем, багается конкурс ссылаясь на null профиля человека. Можно ли как то запретить участвовать людям с закрытым профилем или вообще сделать запрет чтобы с закрытым профилем нельзя было вступить в группу?
Сообщение от Спойлер
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityCons traintViolationException: Column 'winner_username' cannot be null - тут то понятно что не может записать в бд
Exception in thread "OkHttp Dispatcher" java.lang.NullPointerException
Код сохранения в бд?
На каком этапе бот дергает юзера? Конкурс проводится в чате канала, или лично?
|
|
|

02.05.2023, 20:21
|
|
Участник форума
Регистрация: 25.06.2019
Сообщений: 219
С нами:
3624517
Репутация:
105
|
|
Сообщение от Se1dhe
Код сохранения в бд?
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
)
;
}
}
Зависает когда определяет победителя.
Проводится в группе
|
|
|

02.05.2023, 20:23
|
|
Новичок
Регистрация: 16.03.2019
Сообщений: 0
С нами:
3769794
Репутация:
0
|
|
Сообщение от AmaTo
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
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
(
)
)
;
}
}
|
|
|

02.05.2023, 20:27
|
|
Новичок
Регистрация: 16.03.2019
Сообщений: 0
С нами:
3769794
Репутация:
0
|
|
Сообщение от AmaTo
Привет всем. Сделал бота розыграшей, все ок запускается работает, но если выигрывает человек с закрытым профилем, багается конкурс ссылаясь на null профиля человека. Можно ли как то запретить участвовать людям с закрытым профилем или вообще сделать запрет чтобы с закрытым профилем нельзя было вступить в группу?
Сообщение от Спойлер
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityCons traintViolationException: 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
|
|
|

02.05.2023, 20:34
|
|
Новичок
Регистрация: 16.03.2019
Сообщений: 0
С нами:
3769794
Репутация:
0
|
|
Так же, если проводится в группе, то при нажатии на кнопку "участвовать" - нужно проверять юзера на наличие его в бд. если нет - добавлять его в бд и уже после - засовывать его в список участников.
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|