@botoid

Страница 3353 из 4042
Dmitri
14.07.2018
17:52:50
очередь
но ведь тогда бот будет долго отвечать?

marchwinks
14.07.2018
17:52:59
Sergey
14.07.2018
17:53:22
но ведь тогда бот будет долго отвечать?
ну дак тебе нужно бороться с быстрым ответом или быстро отвечать ?

Google
Sergey
14.07.2018
17:54:43
потом посмотрю и скажу как

.
14.07.2018
18:22:20
Оффтоп, простите, был бы рад ссылке на тематический чат. Как в ВК подтвердить валидность callback server'a методом АПИ (type confirmation) ?

Sergey❄️
14.07.2018
18:22:49
Там все написано

Нужно на запрос ответить какой-то уникальной строкой который даст сам вк

.
14.07.2018
18:25:33
Sergey❄️
14.07.2018
18:25:45
Там все написано

Mad
14.07.2018
18:28:34
Я правильно понимаю,если бот админ, то настройка privacy mode не имеет значения? А то я смотрю для моего бота включен privacy mode в настройках, но он успешно работает и получает сообщения в куче чатиков, где он админ.

Sergey
14.07.2018
19:03:35
Метод для этого существует? Или самопально?
просто вернуть эту уникальную строку и все

Google
Mikhail
14.07.2018
21:53:05
Вопрос по работе с бд. Есть игровой бот, в бд пишется результат по уровням (около 15-ти). Планирую сделать опцию /rank - выводящую место игрока по каждому уровню. Как это лучше сделать: select * from users и потом получать индекс игрока из отсортированного словаря для каждого уровня, либо кидать 15 запросов select top 20 from users и в каждом из них искать индекс? С одной стороны, очевиден ответ, что если юзеров мало, то вариант 1, а если много, то 2. Есть какие мысли у кого, а то мне оба варианта не нравятся.

Kirill "Loskir" ?¹³
14.07.2018
21:58:55
Или юзать монго, если nodejs?

tEma
14.07.2018
21:59:31
монго можно ж не только с ноды

Kirill "Loskir" ?¹³
14.07.2018
22:00:19
монго можно ж не только с ноды
Ну да, это понятно, но с ноды удобнее всего, ибо под неё заточено

tEma
14.07.2018
22:01:27
а у серверов телеги какое огранечение на количество запросов?

Mikhail
14.07.2018
22:02:03
Спасибо за ответы, но мой уровень владения вопросом не позволяет полностью их понять. Наверное, буду делать select *, так как юзеров мало и функция не предполагает частое использование.

Mikhail
14.07.2018
22:05:06


tEma
14.07.2018
22:06:55
mode1 mode2 mode3 это уровни?

Mikhail
14.07.2018
22:07:25
15 таблиц под каждый уровень?
Все в куче. Это просчёт изначального планирования и последующего расширения. Да, mode это уровни.

tEma
14.07.2018
22:08:58
ну вот делаешь ("select mode1, mode2 .... mode 15 from 'название таблицы' where user_id = ?", (update.user_id))

только там навзание столбца после where поставь свое и где апдейт сделай по человечески

Kirill "Loskir" ?¹³
14.07.2018
22:10:09
ну вот делаешь ("select mode1, mode2 .... mode 15 from 'название таблицы' where user_id = ?", (update.user_id))
Ему нужно вытащить топ по лвл, а не конкретного юзера

tEma
14.07.2018
22:11:01
у него написано что выводить должно место игрока по уровню

то есть я жму ранк я и получаю свой топ по всем уровням -_-

Mikhail
14.07.2018
22:11:15
ну вот делаешь ("select mode1, mode2 .... mode 15 from 'название таблицы' where user_id = ?", (update.user_id))
Недопонимание, наверное. Я ожидаю: Юзер вводит /rank, ему: Мод1 позиция 1 Мод2 позиция 3 Итд

Google
Mikhail
14.07.2018
22:12:07
Здесь либо много запросов на сортировку и вывод топа, либо получить все и крутить самому

tEma
14.07.2018
22:12:24
можно как то сортировкой я не умею так делать, у тебя питон?

помню похожее только чуть проще было мне подсказали

но вообще держать все все все в 1 таблице это не грамотно

особенно если ты рассширяться хочешь

Mikhail
14.07.2018
22:15:51
Да, есть такое ´SELECT username FROM users ORDER BY mode1_score DESC´ Тут же тупняк в том, что это нужно сделать для каждого столбца.

tEma
14.07.2018
22:16:55
ща думаю

Mikhail
14.07.2018
22:17:03
но вообще держать все все все в 1 таблице это не грамотно
Если есть минутка, напиши свою мысль, как лучше.

tEma
14.07.2018
22:18:09
чет башка не варит, но идея прям на можжечке вертится)

~/42/elrandir> ?ᅠ
14.07.2018
22:19:58
Что мешает джоинами получить то что нужно, с под запросами, для каждого топа

А потом оформит в яп подобающе?

tEma
14.07.2018
22:22:19
можно вот что то такое тащить select user_id, mode 1, mode 2..... у тебя получается если данные формата ((user_id1, 123 ,23, 0),(user_id2, 23 ,42, 213),(user_id3, 500 ,0, 1)) потом берешь и в цикле сортируешь

сортируешь все кроме user_id, потом делаешь еще один цикл в котором ставишь по местам, где смотришь на какой позиции стоит 123 из user_id1 и так далее

чет дичь, ночные алгоритмы

Kirill "Loskir" ?¹³
14.07.2018
22:25:36
Это все дело на питоне же?

tEma
14.07.2018
22:26:21
ну у меня в голове на питоне? сделать можно, но нужно ли

может есть все таки какая то сортировка в sql или таблицы разделить

Mikhail
14.07.2018
22:27:40
можно вот что то такое тащить select user_id, mode 1, mode 2..... у тебя получается если данные формата ((user_id1, 123 ,23, 0),(user_id2, 23 ,42, 213),(user_id3, 500 ,0, 1)) потом берешь и в цикле сортируешь
Это и есть вариант 1. Им и собираюсь воспользоваться. Единственное, что не нравится, если будет много юзеров (маловероятно), то запрос может быть тяжелым.

Это все дело на питоне же?
Да, змейка. Но тут яп играет вторичную роль.

Google
Mikhail
14.07.2018
22:30:02
Одна сотая от озвученной цифры. Поэтому, пожалуй, не буду больше утомлять вопросом. Спрошу лишь, как бы ты организовывал подобное хранилище. В двух словах.

Mad
14.07.2018
22:30:20
сначала получаем score пользователя на каждом уровне потом делаем 20 запросов вида select count(*) from table where level=Y and score > X, где X это score нашего юзверя на нужном уровне полученное число + 1 и будет позицией юзверя на нужном уровне

Ну и индекс должен стоять на пару (level, score)

tEma
14.07.2018
22:31:41
Одна сотая от озвученной цифры. Поэтому, пожалуй, не буду больше утомлять вопросом. Спрошу лишь, как бы ты организовывал подобное хранилище. В двух словах.
да хз четсно говоря структура бд сложная штука, я просто помню почитывал про sql там явно говорилось что все в одну таблицу класть плохо

~/42/elrandir> ?ᅠ
14.07.2018
22:32:55
Да, звучит понятно. Я по неопытности боюсь большого количества запросов, поэтому и все в одну таблицу стараюсь.
нет, лучше в разные. Там от этого не сильно скорость падает. Если всё четко и гладко, правильные джоины, и ранние условия, то всё тип топ.

Mad
14.07.2018
22:34:24
Если эту инфу часто будут дёргать, то есть смысл хранить позиции всех игровков по всем уровням в памяти и обновлять каждый раз, когда пришёл результат какой-то игры.

Mikhail
14.07.2018
22:41:30
Всем спасибо за мнения. Остановился на селект алл и сортировке в цикле с выборкой индекса. Для себя понял, что надо почитать нормально про бд, а не на уровне сниппетов.

Mad
14.07.2018
22:42:28
Всем спасибо за мнения. Остановился на селект алл и сортировке в цикле с выборкой индекса. А нафига? Проще же count(*) выбирать из бд, она уже за тебя отсортировала, елси, конечно, ты индекс поставил на колонку.

Mikhail
14.07.2018
22:48:09
Всем спасибо за мнения. Остановился на селект алл и сортировке в цикле с выборкой индекса. А нафига? Проще же count(*) выбирать из бд, она уже за тебя отсортировала, елси, конечно, ты индекс поставил на колонку.
Но ведь нужно будет делать по каждому уровню сперва сортировку order by. Мне кажется, что это медвежий стиль. Вообще, оба варианты равноценно так себе. Из-за минорности масштабов происходящего, наверное, можно так сильно вопросом и не озадачиваться.

Mad
14.07.2018
22:53:42
не нужен order by, ты знаешь что у твоего юзверя с id=13 есть 20 очков на втором уровне, чтобы узнать его позицию ты делаешь запрос select count(*) from user_scores where level=2 and score > 20 Правда тут возникает проблема, это мы найдём кол-во юзверей, у которых очков больше, чем у заданного юзверя. А есть же ещё те, у которых такое же кол-во очков, вот там уже должна быть какая-то сортировка чтобы понять место юзверя среди юзверей с тем же кол-м очков

Ну можно такое условие сделать: ... and score >=20 and time_of_last_game > Z где z это время последней игры нашего пользователя Только придётся это всё в ииндекс пихать.

Mikhail
14.07.2018
23:01:42
не нужен order by, ты знаешь что у твоего юзверя с id=13 есть 20 очков на втором уровне, чтобы узнать его позицию ты делаешь запрос select count(*) from user_scores where level=2 and score > 20 Правда тут возникает проблема, это мы найдём кол-во юзверей, у которых очков больше, чем у заданного юзверя. А есть же ещё те, у которых такое же кол-во очков, вот там уже должна быть какая-то сортировка чтобы понять место юзверя среди юзверей с тем же кол-м очков
Да, я тоже об этом подумал (кейс - одинаковые скоры). В целом, итог: можно сделать япом, можно запросом, но лучше грамотней составлять бд. Если бы юзеров было много, то воспользовался бы твоим вариантом. Нет сомнений, что он будет работать, но при прочих равных, мне проще селект аллом.

Mad
14.07.2018
23:03:07
Не, если юзверей много, лучше в памяти кэшировать все эти позиции и обновлять по мере надобности и БД вообще не дёргать.

Думаю в redis должны быть какие-то подходящие структуры для этого

Serg
14.07.2018
23:24:45
индекс естесно строится по двум полям. Тогда и на миллионе юзеров запрос отработает моментально

Sergey
15.07.2018
00:18:23
почитай про декомпозицию и нормализация баз данных

Google
Павел
15.07.2018
07:45:14
че телебот под 3.7 еще не подогнали?

Sergey
15.07.2018
08:51:48
Павел
15.07.2018
08:52:05
да мне не горит)

Евгений
15.07.2018
08:55:38
да, с гитхаба клонируй
Так там тоже не готово ещё

Sergey
15.07.2018
08:56:06
Andre
15.07.2018
10:08:14
чёт у меня вдруг бот на telepot стал падать со следующей ошибкой: ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:833) никто не в курсе, что за беда приключилась?

Sergey
15.07.2018
10:09:29
SSL: WRONG_VERSION_NUMBER

Страница 3353 из 4042