import asyncio
import datetime
import random
import colorama
async def main():
t0 = datetime.datetime.now()
print(colorama.Fore.WHITE + "App started.", flush=True)
data = asyncio.Queue()
task1 = asyncio.ensure_future(generate_data(20, data))
task2 = asyncio.ensure_future(generate_data(20, data))
task3 = asyncio.ensure_future(process_data(40, data))
# Переименовано из "final_task" в "gather_result" т.к. gather возвращает результат (Список значений объектов)
# В данном коде ничего не возвращается и можно удалить print и саму переменную
gather_result = await asyncio.gather(task1, task2, task3)
print(gather_result)
dt = datetime.datetime.now() - t0
print(colorama.Fore.WHITE + f"App exiting, total time: {dt.total_seconds():,.2f} sec.", flush=True)
async def generate_data(num: int, data: asyncio.Queue):
for idx in range(1, num + 1):
item = idx * idx # equal idx ** 2
await data.put((item, datetime.datetime.now()))
print(colorama.Fore.YELLOW + f" -- generated item {idx}", flush=True)
await asyncio.sleep(random.random() + 0.5)
async def process_data(num: int, data: asyncio.Queue):
processed = 0
while processed < num:
item = await data.get()
processed += 1
value = item[0]
t = item[1]
dt = datetime.datetime.now() - t
print(colorama.Fore.CYAN + f" +++ Processed value {value} after {dt.total_seconds():,.2f} sec.", flush=True)
await asyncio.sleep(0.5)
if __name__ == '__main__':
asyncio.run(main())
import asyncio
import ssl
from typing import Optional, Type
import aiohttp
import certifi
import ujson as json
class Scrapper:
def __init__(self, connections_limit: int = None) -> None:
self._session: Optional[aiohttp.ClientSession] = None
self._connector_class: Type[aiohttp.TCPConnector] = aiohttp.TCPConnector
ssl_context = ssl.create_default_context(cafile=certifi.where())
self._connector_init = dict(limit=connections_limit, ssl=ssl_context)
async def get_new_session(self) -> aiohttp.ClientSession:
return aiohttp.ClientSession(
connector=self._connector_class(**self._connector_init),
json_serialize=json.dumps
)
async def get_session(self) -> Optional[aiohttp.ClientSession]:
if self._session is None or self._session.closed:
self._session = await self.get_new_session()
if not self._session._loop.is_running():
await self._session.close()
self._session = await self.get_new_session()
return self._session
async def make_request(self, session, url, post, **kwargs):
try:
if post:
async with session.post(url, data=None, headers=None, **kwargs) as response:
try:
return await response.json()
except:
return response.text
else:
async with session.get(url, params=None, headers=None, **kwargs) as response:
try:
return await response.json()
except:
return response.text
except aiohttp.ClientError as e:
print(f"aiohttp client throws an error: {e.__class__.__name__}: {e}")
async def request(self, url: str, post: bool = False, **kwargs):
return await self.make_request(await self.get_session(), url, post, **kwargs)
async def get_access(self) -> None:
return await self.request("https://google.com", False)
scrapper = Scrapper()
async def main():
await scrapper.get_access()
asyncio.run(main())
sleep() always suspends the current task, allowing other tasks to run.
import asyncio
import time
async def test(delay: int, number: int):
print(f"Задача: {number}\n"
f"Начато выполнение в {time.strftime('%X')}\n"
f"Ждем {delay} секунд")
await asyncio.sleep(delay)
print(f"Закончили задачу {number} в {time.strftime('%X')}")
async def startup():
delays = [10, 8, 14, 5]
for i, x in enumerate(delays):
await test(x, i + 1)
if __name__ == '__main__':
asyncio.run(startup())
await asyncio.sleep(delay)
является блокирующей функцией keyboard_bar_inline_tarif_buy_status
у вас глобальная переменная@dp.message_handler(lambda message: message.text == ' Мои покупки')
async def buy_status(message : types.Message):
await bot.send_message(message.from_user.id, f' Ваши купленные паки:', reply_markup=keyboard_bar_inline_tarif_buy_status(), parse_mode='Markdown')
def keyboard_bar_inline_tarif_buy_status():
kb = InlineKeyboardMarkup(row_width=1)
for i in range(1, 7):
cur.execute(f'SELECT TARIF{i} FROM users')
data_total = cur.fetchone()
if data_total[0] == 'PAID':
kb.add(InlineKeyboardButton(text=f'{i}', callback_data=f'pay{i}'))
return kb
await state.finish()
await state.set_state(reg.name)
from aiogram.contrib.fsm_storage.memory import MemoryStorage
storage = MemoryStorage()
from aiogram.dispatcher import FSMContext
@dp.message_handler(commands=['start'])
async def start(message: types.Message, state=FSMContext):
await message.answer('Вы ввели команду /start, введите команду /stop или /cancel чтобы выйти из меню')
await state.set_state(YourState.name_state)
@dp.message_handler(commands=['stop'], state=YourState.name_state)
async def stop(message: types.Message, state=FSMContext):
await message.answer('Вы ввели команду /stop')
await state.finish()
@dp.message_handler(commands=['cancel'], state='*')
async def cancel(message: types.Message, state=FSMContext):
current_state = await state.get_state()
if current_state is None:
return
await state.finish()
await message.answer('Вы ввели команду /cancel')
photo_data = await db.get_file_info(f'{files_dir}file_name.png')
if photo_data is None:
media = types.InputFile(f'{files_dir}file_name.png')
msg = await dp.bot.send_photo(chat_id=message.chat.id, photo=media)
full_size_photo_id = msg['photo'][-1]['file_id']
await db.add_file_info(full_size_photo_id)
else:
await dp.bot.send_photo(chat_id=message.chat.id, photo=photo_data)
if photo_data is None:
if len(photo_data) == 0:
if adm_spis == spisbtns[0]:
users = db.db_all()
db_schet = len(users)
users_list = {}
text_message = ''
for user in users:
id = user[0]
username = user[1]
user_id = user[2]
number = user[3]
subscription = user[4]
admi = user[5]
blocked = user[6]
ban = user[7]
text_message += f'<b>ID: </b><code>{id}</code>\n<b>USERNAME: </b><code>{username}</code>\n<b>USER_ID: </b><code>{user_id}</code>\n<b>NUMBER: </b><code>{number}</code>\n<b>SUBSCRIPTION: </b><code>{subscription}</code>\n<b>BLOCKED: </b><code>{blocked}</code>\n<b>BAN: </b><code>{ban}</code>\n\n'
await msg.answer(f'<b>ВСЯ БАЗА ДАННЫХ </b>\n\n<i>Всего в базе: </i><code>{db_schet}</code>\n\n{text_message}', parse_mode='html')
from aiogram import types
@dp.message_handler(commands=['start'])
async def start_command(message: types.Message):
await message.answer("Hello")
async def start_bot(message: types.Message, state: FSMContext):
state = dp.current_state(user=user_id)
переименовываете, т.к. вы ею переназначаете FSMContext
на dp.current_state(user=user_id)
await state.update_data(item_id=item_id)
выполнится успешно @dp.message_handler(state=Add.test_state)
@dp.message_handler(commands=['start'])
async def start_bot(message: types.Message, state: FSMContext):
if message.text == '/start':
await message.answer(text="Отправь мне свое имя")
await Add.test_state.set() # Ваш state
await asyncio.sleep(5) # 5 сек спим
try:
data = await state.get_data()
if data['get_name'] == 'true':
pass
except KeyError:
# Если пользователь не ответил или за это время state завершился, получаем KeyError
await message.answer(f'Жаль, что ты не ответил')
await state.finish()
else:
await state.update_data(get_name='true')
await message.answer(f'Твое имя {message.text}')
# Установите следующие состояние
# Если вы завершите состояние, то тогда бот ответит 'Жаль, что ты не ответил'
@dp.callback_query_handler(text='rand')
принимает text, который нужен для обычных кнопок, после нажатия которых отправляется сообщение от пользователя.@dp.callback_query_handler(lambda c: c.data == 'amf')
async def randws(call: CallbackQuery):
await call.message.answer('gggg')
import requests
from bs4 import BeautifulSoup
import lxml
url = "https://www.ozon.ru/product/holodilnik-indesit-tia-180-belyy-277079362/"
payload = {}
headers = {
'User-Agent': 'PostmanRuntime/7.28.1',
'Cookie': 'ЗДЕСЬ КУКИ'}
response = requests.request("GET", url, headers=headers, data=payload)
page = BeautifulSoup(response.content, 'lxml')
print(page)
<div id="state-webPrice-836055-default-1"
data-state='{"isAvailable":true,"price":"17 990 ₽","originalPrice":"20 390 ₽","showOriginalPrice":true,"mode":"credit","payment":"1 799 ₽","paymentTerm":"12 мес","hintLink":"https:\u002F\u002Fwww.ozon.ru\u002Fsection\u002Fcredit\u002F","hintText":"Приблизительный расчет. Платеж зависит от срока и типа кредитного продукта"}'>
answer
не принимает параметр chat_idawait mybot.bot.send_message(chat_id = 123, text=message.text)
await mybot.bot.send_message(627976213, message.text)
@dp.message_handler(commands=['number'])
async def number(message: types.Message):
number = message.get_args()
number1 = int(number)*1000
if int(number) < 0:
await message.reply("Нельзя вводить отрицательное число")
else:
await message.reply(f"Твое число {number1}")
@dp.message_handler(commands=['number'])
async def number(message: types.Message):
number = message.get_args()
if number is not None and number.isdigit():
if int(number) < 0:
await message.reply("Нельзя вводить отрицательное число")
else:
await message.reply(f"Твое число {int(number) * 1000}")
elif number is None:
await message.reply(f'Введите число после команды "/number 5 "')
else:
await message.reply(f'После команды "/number" ожидается число, а не текст')
reply_to – идентификатор сообщения, на которое требуется ответить.
целое число, доступен начиная с версии 5.92
message_id — идентификатор сообщения