• Как написать сервисный файл для vps ubuntu для запуска телеграм бота?

    @Egor12347 Автор вопроса
    Everything_is_bad, Вот такие логи
    May 30 07:46:17 3025421-ao72586.twc1.net python3[11595]: Traceback (most recent call last):
    May 30 07:46:17 3025421-ao72586.twc1.net python3[11595]:   File "/home/bot-user/bot_aiogram/src/main.py", line 2, in <module>
    May 30 07:46:17 3025421-ao72586.twc1.net python3[11595]:     from aiogram import Bot, Dispatcher
    May 30 07:46:17 3025421-ao72586.twc1.net python3[11595]: ModuleNotFoundError: No module named 'aiogram'


    Вот код самого сервис файла

    #!/usr/bin/env python 
    [Unit]
    Description=Our First Test Bot Service
    After=syslog.target
    After=network.target
    
    [Service]
    Type=simple
    Restart=always
    RestartSec=3
    User=bot-user
    WorkingDirectory=/home/bot-user/bot_aiogram/
    ExecStart=python3 'src/main.py'
    
    [Install]
    WantedBy=multi-user.target


    Что касаемо нашего спора, хочу решить свой вопрос, я сюда не спорить пришел
    Написано
  • Как написать сервисный файл для vps ubuntu для запуска телеграм бота?

    @Egor12347 Автор вопроса
    Everything_is_bad, Дружище, я понимаю у тебя гиперответсвенность, но будь добр оставлять конструктивные ответы, либо избавь от советов, что под прошлым вопросом, что под этим совет уровня сделай это и все, если прочитаешь внимательно вопрос, то я не могу найти ответ на просторах интернета, что на руско, что на англо-язычных, именно поэтому оставил вопрос)
    Написано
  • Не запускается бот на облачном сервере, что делать?

    @Egor12347 Автор вопроса
    Everything_is_bad, виртуальные окружение используется, не обновилось в директории перед тем как я сделал фото, не мог бы подсказать почему не стоит работать от root?
    Написано
  • Не запускается бот на облачном сервере, что делать?

    @Egor12347 Автор вопроса
    Everything_is_bad, я уже всяко-разно пробовал запустить бота и уже хотябы понимаю почему он не запускается вот такая ошибка вылезает

    Traceback (most recent call last):
    File "/root/bot/src/main.py", line 7, in
    from services import DataBase1
    File "/root/bot/src/services/__init__.py", line 1, in
    from .sql import DataBase, DataBase1
    File "/root/bot/src/services/sql.py", line 4, in
    from src.config import Config
    ModuleNotFoundError: No module named 'src'

    Это сама директория

    6656e91f6152b890735172.png

    6656e95b04f16289344985.png
    Написано
  • Не запускается бот на облачном сервере, что делать?

    @Egor12347 Автор вопроса
    Everything_is_bad,
    6656c3766ca27869062725.png

    6656c37ca075b333308901.png
    Вот все зависимости
    Написано
  • Не запускается бот на облачном сервере, что делать?

    @Egor12347 Автор вопроса
    Everything_is_bad, а где можно посмотреть, я практически уверен, что это vps, так как делал по гайду из интернета, но удостовериться не помешало бы
    Написано
  • Не запускается бот на облачном сервере, что делать?

    @Egor12347 Автор вопроса
    Сейчас проверю, благодарю
    Написано
  • Как реализовать кнопку удаления из корзины в пагинации?

    @Egor12347 Автор вопроса
    Если кому интересно реализовал свою задумку таким образом:

    from aiogram import F, Router
    from contextlib import suppress
    from aiogram.exceptions import TelegramBadRequest
    from aiogram.fsm.context import FSMContext
    from aiogram.types import CallbackQuery, FSInputFile
    from aiogram.types.input_media_photo import InputMediaPhoto
    from src.services import DataBase1
    from src.states.user import BasketTask
    from src.keyboards import menu_inline_order
    from src import keyboards
    
    
    router: Router = Router()
    db1 = DataBase1('tg_order.db')
    list_full_basket = [[]]
    list_basket_delete = None
    
    
    @router.callback_query(BasketTask.page, keyboards.Basket.filter(F.action.in_(['prev_basket', 'next_basket'])))
    async def pagination_handler(call: CallbackQuery, callback_data: keyboards.Basket, state: FSMContext):
    
        page_num_basket = int(callback_data.page)
        page_basket = page_num_basket - 1 if page_num_basket > 0 else 0
        media_photo = FSInputFile('gh.png')
    
        if callback_data.action == 'next_basket':
    
            await call.answer()
            page_basket = page_num_basket + 1 if page_num_basket < (len(list_full_basket) - 1) else page_num_basket
    
        with suppress(TelegramBadRequest):
    
            await state.update_data(page=page_basket)
            data = await state.get_data()
            print(data)
            await call.message.edit_media(InputMediaPhoto(
                media=media_photo if page_basket == 0 else list_full_basket[page_basket][0],
                caption=f'{list_full_basket[page_basket][1]}'),
                reply_markup=keyboards.paginator_basket(page_basket) if page_basket > 0 else keyboards.paginator_basket_start()
            )
    
    
    @router.callback_query(F.data == 'basket')
    async def check_history(call: CallbackQuery, state: FSMContext):
    
        try:
            data1 = await state.get_data()
            page_basket = data1['page']
            data = await db1.select_task_label(call.from_user.id)
            label = data[page_basket - 1][0]
            await db1.delete_task(call.from_user.id, label)
        except KeyError:
            pass
    
        await state.clear()
        await call.message.delete()
        await call.answer()
        photo_p = 'gh.png'
        all_show_basket = await db1.show_all_basket(call.from_user.id)
        final_show_basket = all_show_basket
    
        if len(final_show_basket) == 0:
    
            await call.message.answer('В корзине пока нет товаров(\n'
                                      'Заказывайте скорее!', reply_markup=menu_inline_order)
    
        else:
            await state.set_state(BasketTask.page)
            global list_full_basket
            text = ''.join(f'{all_sh[3]}@'
                           f'Имя пользователя: {all_sh[2]}'
                           '                                    '
                           f'Трек номер: {all_sh[9]}'
                           '                                    '
                           f'Ссылка на товар:                                          {all_sh[5]}'
                           '                                                    '
                           f'Цена: {all_sh[6]} рублей '
                           '                                                    '
                           f'Размер: {all_sh[7]} EU'
                           '                                                    '
                           f'Доставка: {all_sh[8]}'
                           '                                                    '
                           f'Номер телефона: {all_sh[9]}@' for all_sh in final_show_basket)
            start_text = ''.join(f'{start_price[4]}@'
                                 f'В вашей корзине: {len(final_show_basket)} товаров'
                                 '                                                  '
                                 f'На обшую сумму: {start_price[6]} рублей' for start_price in all_show_basket)
            print(start_text)
            show_list = start_text.split('@')
            up_show_list_basket = [show_list[u:u + 2] for u in range(0, len(show_list), 2)]
            up_list_basket = text.split('@')
            res_list_basket = [up_list_basket[b:b + 2] for b in range(0, len(up_list_basket), 2)]
            final_list_basket = res_list_basket[: -1]
            list_full_basket = up_show_list_basket + final_list_basket
            await call.message.answer_photo(photo=FSInputFile(path=photo_p),
                                            caption=f'{list_full_basket[0][1]}',
                                            reply_markup=keyboards.paginator_basket_start())


    Код машинного состояния

    class BasketTask(StatesGroup):
        page = State()
        final = State()


    Ну и напоследок
    1. Я почистил код от ненужных строк, и добавил машинное состояние, которое, динамически записывает номер строки (page_basket) пагинации на которой я сейчас нахожусь.
    2. Так же я добавил уникальный номер(далее по тексту Л - лейбл) для каждой записи в бд который присваивается для каждого товара в корзине,(так как товар добавляется исходя из данных пользователя),
    3. При нажатии на кнопку удалить товар, я достаю из бд каждый Л товара и создаю список он примерно такого формата [(ffd3gkjh,), (jlfgjdl4,)]
    4. И далее я через цикл try/except достаю значение страницы пагинации на которой находился, но так как у меня есть стартовая страница корзины с общей информацией, то значение - 1 и далее удаляю значение из списка с Л и обновляю бд.
    5. И уже после этого заново достаю все записи корзины из бд и отправляю их пагинацией пользователю.

    Код сделан исходя из моих задумок и видения, какие-либо советы по доработке кода готов выслушать. Что касаемо нескольких уровней пагинации в которой это можно было реализовать, то я просто не хотел переписывать код, тем более меня устраивает подобное решение, которое работает.

    Если кому будет полезно - рад был помочь.)
    Написано
  • Выдает предупреждение о размере куи памяти в IDE PyCharm, хочу понять на что это влияет и как увеличить память?

    @Egor12347 Автор вопроса
    Еще такой вопрос не по теме, у меня в проекте есть FSM который используется для калькулятора, по умолчанию я поставил хранение состояний в MemoryStorage, после того как я размещу бота на сервере, будет ли все так же работать, сейчас все работает бот считает идеально, в соответствии с функциями
    Написано