
b0g3r
14.07.2017
13:21:10
Он не встроенный таки

Oleg
14.07.2017
13:21:40
ну, смысл в том, что я прикрутил ptb, указал адрес и вебкух работает =)

b0g3r
14.07.2017
13:22:16
Ptb?

Oleg
14.07.2017
13:22:24
pythont-telegram-bot

Google

b0g3r
14.07.2017
13:22:30
К чему прикрутил? О чем мы щас говорим? Давай ссылочку
Там нет никакого фласк-апп, только в примерах
Может в туторе каком, но это все равно руками все делается

Oleg
14.07.2017
13:23:09
https://github.com/python-telegram-bot/python-telegram-bot/

Aleksandr
14.07.2017
13:23:32

Oleg
14.07.2017
13:25:15
updater.bot.setWebhook(URL)
updater.start_webhook(listen=IP, port=PORT, url_path=PATH)
и больше ничего делать не надо =)
The python-telegram-bot library ships a custom HTTP server, based on the CPython BaseHTTPServer.HTTPServer implementation, that is tightly integrated in the telegram.ext module and can be started using Updater.start_webhook. This webserver also takes care of decrypting the HTTPS traffic. It is probably the easiest way to set up a webhook.
Вопрос-то не в этом
Вопрос в том как сделать то, что я описал :)
Когда прилетел вебхук, не отвечать автоматом 200, а ждать пока кто-то из хенлеров приготовит ответ и отправлять ответ вместе с 200, а не отдельным реквестом


b0g3r
14.07.2017
13:28:15
В общем случае - никак
Потому что нужно учесть:
1) таймауты апи (~60 секунд, но иногда снижаются до 30-40 без предупреждения)
2) невозможность получения статуса (отправляешь маркдаун? В тексте звёздочка? Хер узнаешь)
3) невозможность отправить несколько действий за раз (нажатие на инлайн клавиатуру: редактирование и answercallbackquery)

Google

b0g3r
14.07.2017
13:29:17
Ну и давай ближе к конкретике: какой враппер используешь, какой веб-фреймворк
Для этого придется слегка переписать весь свой код: в функции, обрабатывающей запрос от вебхука, хэндлер должен вызываться явно и возвращать список из действий (или вызываться неявно и писать его в глобальную переменную) вместо вызовов методов апи. Все кроме последнего действия отправляем запросами в апи, одно - ответом на вебхук. Если важна последовательность, то думаем о последовательности

Oleg
14.07.2017
13:35:47
го в лс :)

b0g3r
14.07.2017
13:35:49
(но т.к. ответ на запрос от вебхука не позволяет узнать статус, то надеемся на худшее)
Зачем?)
Это же не только тебе может пригодиться

Oleg
14.07.2017
13:36:26
про то, что результат я не узнаю - не страшно
Вопрос том, как воспринимает телега ответы

b0g3r
14.07.2017
13:37:23
https://core.telegram.org/bots/faq#how-can-i-make-requests-in-response-to-updates
+
@botoid

Roman
14.07.2017
13:37:30
не знал про Высоту, прикольная история
да на самом деле много чего такого. страна то большая. но это не мало кому инетерсно, а вот если запостишь картинку из серии угадай страну, где сравнивают Доху и деревню Верхняя кабанка, то сразу попадаешь в тренды

Oleg
14.07.2017
13:38:22
при одновременном ответе лимитов нет

b0g3r
14.07.2017
13:39:14

Oleg
14.07.2017
13:39:45
в том и вопрос, как это реализовать правильно

b0g3r
14.07.2017
13:49:13
Для этого придется слегка переписать весь свой код: в функции, обрабатывающей запрос от вебхука, хэндлер должен вызываться явно и возвращать список из действий (или вызываться неявно и писать его в глобальную переменную) вместо вызовов методов апи. Все кроме последнего действия отправляем запросами в апи, одно - ответом на вебхук. Если важна последовательность, то думаем о последовательности

Anatoly
14.07.2017
13:52:09
Можно ли как-нибудь узнать всех прямых детей класса? Или можно ли отлавливать когда от класса создается наследник?

Reanimator
14.07.2017
13:52:14
Ну так что? За косарь баксов в км в лом написать пару строк?
Пример есть, укров говнокод. Пашет как часи только когда лосят ложится Малеха биржа

b0g3r
14.07.2017
13:54:31

Nikolay
14.07.2017
13:54:49

Google

Tigran
14.07.2017
13:54:58

Nikolay
14.07.2017
13:55:38

Anatoly
14.07.2017
13:55:49
Что есть "создаётся"?
Создается класс, т.е. class Derived(Base)
Вот Base должен как-то узнать что от него отнаследовались

Makc
14.07.2017
13:56:17

Nikolay
14.07.2017
13:56:23

Makc
14.07.2017
13:56:24
А, уже написали)

Nikolay
14.07.2017
13:56:29
а так - метаклассы

sad
14.07.2017
14:00:25

Tigran
14.07.2017
14:01:42

b0g3r
14.07.2017
14:01:53
Прямых только

Tigran
14.07.2017
14:02:03
или нет
а, всё в порядке

Tigran
14.07.2017
14:02:43
видимо, стандартная библиотека редко наследуется от object

sad
14.07.2017
14:03:15

Sarvar
14.07.2017
14:03:32
https://www.youtube.com/watch?v=Sv7tI4wjBss

sad
14.07.2017
14:03:43
А ты имел ввиду object который object

Tigran
14.07.2017
14:04:29

sad
14.07.2017
14:05:55

ivan
14.07.2017
14:21:35
Можно ли как-то получить список всех экземпляров одного класса?

Google

Nikolay
14.07.2017
14:21:58
можешь прямо в конструкторе запихивать self куда угодно

ivan
14.07.2017
14:22:38
Хм
Подойдёт

Artem
14.07.2017
14:22:51
главное не забывать в деструкторе убирать
хотя лол

Admin
ERROR: S client not available

Artem
14.07.2017
14:23:14
он не будет вызываться, потому что селф где-то

Nikolay
14.07.2017
14:23:16
викрефы можно пихать в сет

Artem
14.07.2017
14:23:44
можно
да, так правильно

sad
14.07.2017
14:30:41
Но правильней да регестрировать их
блин торможу уже всё сказали

Artem
14.07.2017
14:31:58

ivan
14.07.2017
14:33:07
Спасибо

sad
14.07.2017
14:33:10
filter(lambda obj: isinstance(obj, ClassName), gc.get_objects())
>>> gc.get_objects()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NotImplementedError: not applicable to Java GC

Google

sad
14.07.2017
14:37:17
Вообще насчет gc не строит полагаться на поведение специфичное для cpython. Я когда-то написал говнокод и так было что-то вроде text = open(filename).read() в цикле. В расчете на то, что файл закроется сам. Это происходит в cpython, а вот в jython сборщик мусора работает не так. И код валился из-за превышения допустимого количества открытых файлов.
В ironpython тоже как-то так. И во всяких других реализациях тоже может отличаться поведение.
Аналогично с деструкторами, которые в питоне вроде как и не деструкторы и лучше их не использовать.


Lucky
14.07.2017
15:00:01
Есть код который выполняется N раз:
result = c.execute("SELECT * FROM MAIN WHERE ID=? AND NAME=?", (str(id), str(name)))
for N in result:
temp += f'{row[2]}'
Есть почти такой же код, который выполняется 1 раз вне зависимости от количества результатов:
result = c.execute("SELECT * FROM MAIN WHERE ID=? AND NAME=?", (str(id), str(name)))
for N in result:
c.execute("DELETE FROM MAIN WHERE SOME=?", (str(row[0])))
сonnect.commit()
Подскажите почему так, пожалуйста.

Dk
14.07.2017
15:02:24
ты курсор перезаписываешь

Nikolay
14.07.2017
15:03:09
не надо делать в питоне то, что можно сделать в базе
это, прям, первое правило


Бекболот
14.07.2017
15:03:47
Друзья, мы можем внести вклад во всестороннее развитие молодежи Кыргызстана. Наш друг Абдырахман участвует в "поединке" среди иностранных студентов за годичное проживание в общежитии зарубежом при поступлении на магистерскую программу. Как можно скорее нужно набрать 5000 голосов. Для этого нужно:
1. Пройти по данной ниже ссылке: https://scholarship.uniplaces.com/en/u/sulmanew33361
2. В открывшемся окне нажать VOTE NOW.
3. В поле для e-mail написать ваш адрес электронной почты.
4. Поставить галочку в строке " Я не робот".
5. Ответив на потверждение, (надо еще раз нажать VOTE NOW) пришедшее на вашу почту, вы считаетесь проголосовавшим.
Спасибо всем. Репост приветствуется.

Lucky
14.07.2017
15:04:06

Nikolay
14.07.2017
15:04:47

Mikhail
14.07.2017
15:04:55

Lucky
14.07.2017
15:05:30

ilya
14.07.2017
15:12:01
эй. Зачем удалили,я не успел дочитать про Казань))

Daria
14.07.2017
15:12:18
Сорри, гайз, случайно))

Vitalik
14.07.2017
15:14:02
Кто в сокетах шарит?

Nikolay
14.07.2017
15:15:08