import time
# Время берется 1 раз в момент запуска скрипта, чему оно будет равно?
now = datetime.now()
current_time = now.strftime("%H:%M:%S")
# Цикл запущен и проверяет время, которое было взято 1 раз выше, что получится? Получится то, что цикл будет искать время, которое уже истекло.
while True:
time.sleep(1)
if current_time == '16:49:00':
print('text')
# Так, щас 16:49:00?
# Ок, ждем 1 сек...
# Так, щас 16:49:01?
# Ок, ждем 1 сек...
# Так, щас 16:49:02?
# У нас время идет вперед или назад..? Если все таки вперед, то сможет ли оно достигнуть current_time, которое уже меньше, чем ожидаемое время..?
import time
from datetime import datetime
while True:
now = datetime.now()
current_time = now.strftime("%H:%M:%S")
if current_time == '17:15:00':
print('text')
time.sleep(1)
else:
print(f'Нихуа ({current_time})!')
time.sleep(1)
# Нихуа (17:14:56)!
# Нихуа (17:14:57)!
# Нихуа (17:14:58)!
# Нихуа (17:14:59)!
# text
# Нихуа (17:15:01)! <--- Вот здесь оказывается Ваш первоначальный скрипт
# Нихуа (17:15:02)!
# Нихуа (17:15:03)! <--- Мы ждем какое время, 16:49:00?
explode
например поможет избавится от списков. В целом одна и та же информация, может быть представлена в разном виде и в реляционных бд предпочтительнее (но не обязательно) иметь простые типы данных. to_pickle
, и соответственно read_pickle
для чтения. Что изучать python backend разработчику?
import { useEffect } from 'react'
import { ITelegramUser } from '../../../../types/telegram/api-telegram-user.ts'
declare global {
interface Window {
onTelegramAuth: (user: ITelegramUser) => void
}
}
export const ButtonTelegramAuth = () => {
useEffect(() => {
const button = document.createElement('script')
button.async = true
button.src = 'https://telegram.org/js/telegram-widget.js?22'
button.setAttribute('data-telegram-login', 'name_bot')
button.setAttribute('data-size', 'large')
button.setAttribute('data-radius', '20')
button.setAttribute('data-onauth', 'onTelegramAuth')
document.body.appendChild(button)
window.onTelegramAuth = function (user) {
alert(
'Logged in as ' +
user.first_name +
' ' +
user.last_name +
' (' +
user.id +
(user.username ? ', @' + user.username : '') +
')'
)
}
return () => {
document.body.removeChild(button)
}
}, [])
return <div id="telegram-widget-container"></div>
}
script.setAttribute('data-auth-url', 'https://site.pw');
button.setAttribute('data-onauth', 'onTelegramAuth')
declare global {
interface Window {
onTelegramAuth: (user: ITelegramUser) => void
}
}
window.onTelegramAuth = function (user) {
alert(
'Logged in as ' +
user.first_name +
' ' +
user.last_name +
' (' +
user.id +
(user.username ? ', @' + user.username : '') +
')'
)
}
--restart always
). Еще с помощью Docker легко будет пробросить API ключи в переменное окружение. Я знаю что можно взять используя регулярные выражения, но я новенькой в пайтоне, и совсем не понял как сделать
data = '' # в data - вся приведенная простыня
for line in data.split('\n'):
if line.startswith(('Пользователь', '=== Всего пользователей:', '=== Общий трафик')):
print(line)
=== Всего пользователей: 8
Пользователь: Admin_16/03 Порт: 1317 Трафик: 75.06 GB
Пользователь: Rahym_16/03 Порт: 6993 Трафик: 214.78 GB
Пользователь: Mama_16/03 Порт: 6951 Трафик: 28.14 GB
Пользователь: Klass_17/03 Порт: 7124 Трафик: 69.52 GB
Пользователь: Rahym2_01/04 Порт: 8543 Трафик: 73.77 MB
Пользователь: Toyjan_01/04 Порт: 7814 Трафик: 8.75 GB
Пользователь: David_03/04 Порт: 5870 Трафик: 6.05 GB
Пользователь: Test_07/04 Порт: 4282 Трафик: 0 B
=== Общий трафик всех пользователей: 402.36 GB
from aiogram import Bot
bot = Bot(token=config.bot_token)
async def main():
await bot.send_message(my_chat_id, my_message)
await bot.close()
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
@decorator
def foo():
..
foo = decorator(foo)
@FuncDec()
def foo():
print('Hello')
foo = FuncDec()(foo)
, а именно:FuncDec
(вызывается конструктор __init__
)__call__
) вместе с параметром foowrapper
, которая и будет в дальнейшем выполняться вместо объявленной foo
foo = FuncDec(foo)
нужно в 24 строки уложиться
return ''.join('0' if n == '1' else '1' for n in d)
return '1' if n == 1 else ((s := dracon(n - 1)) + '1' + invert(s)[::-1])
dr
, идентичны одной из веток условного оператора внутри цикла - так что удалим их, а цикл пусть сделает ещё одну итерацию, для этого в начале dr
должно оказаться что-то, отличное от '1'
.invert = lambda d: ''.join('0' if n == '1' else '1' for n in d)
dracon = lambda n: '1' if n == 1 else ((s := dracon(n - 1)) + '1' + invert(s)[::-1])
dr = '0' + dracon(int(input()))
print(dr)
import turtle as t
tt = t.Turtle()
for n in dr:
if n == '1':
tt.right(90)
tt.forward(4)
else:
tt.left(90)
tt.forward(4)
input()
:=
).Но как защитить сам код?- как вариант, переписать бота на C/C++.
Как в telebot отправлять сообщение определенному пользователю?
Как спарсить json ответ?
Как добавить объект в список json?
Как сделать кнопку с ссылкой в telebot python?
networksetup -setv6off Wi-Fi