• Как продавать цифровые ключи?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Выше уже предложили вариант с коммерческими плагинами. Если это не устраивает, то можете писать сами.
    Полный цикл разработки описывать не буду, только укажу на те моменты, которые были заданы в вопросе и, по факту, являются ключевыми, про защиту, оптимизацию кода, структуры БД и прочее думайте сами.

    1.Организовать хранение ключей.
    Поскольку ключи, по определению уникальны, но активируют конкретный продукт, то хранить их нужно в отдельной таблице, связанной с таблицей товаров через внешний ключ. Какие еще поля будут в этой таблице - зависит только от потребностей заказчика.
    2.Организовать выборку так, чтобы один ключ мог купить только один покупатель.
    Как работает wordpress не знаю, но в sql* есть конструкция select ... for update, которая блокирует дальнейшую выборку строк до тех пор, пока не закончится текущая транзакция (включающая и блокировку и изменение нужных данных).
    простой пример
    START TRANSACTION;
     
      -- заблокировать нужное
      SELECT value FROM counters WHERE id = 1 FOR UPDATE;
     
       -- увеличить значение.
      UPDATE counters SET value = value + 1 WHERE id = 1;
     
      COMMIT;

    Как именно разделять проданные и не проданные товары - опять же, решать вам, вариантов - несколько.
    3.Загружать ключи.
    Есть такой замечательный формат как csv. Как по мне, для загрузки большого количества данных он подходит наиболее хорошо. Плагины для работы с ним должны быть. С другой стороны это больше вопрос к тому, в каком формате вы их будете получать и уже от этого будет зависеть то, как выгружать их в базу.
    * - точно есть в mysql и postgresql (и, по идее, любых других бд, поддерживающих транзакции)
    Ответ написан
    Комментировать
  • Как сделать чтобы сообщения отправлялись спустя определённое время?

    jerwright
    @jerwright
    while True: coding()
    Вы делали всё правильно, но вместо цифры для time.sleep (2) попробуйте ввести 30 (для 1 случая) и 600 (10 минут) для 2 случая.
    Ответ написан
    1 комментарий
  • Как сделать чтобы сообщения отправлялись спустя определённое время?

    1. Не используйте time.sleep в асинхронном коде: https://discordpy.readthedocs.io/en/stable/faq.htm...
    2. Используйте asyncio.Task'и для множества циклов в фоне.
    2.1. discord.py имеет расширение для упрощения использования asyncio.Task'ов в контексте дискорда:
    https://discordpy.readthedocs.io/en/stable/ext/tas...

    from asyncio import sleep
    from discord.ext import tasks
    
    ...
    
    @tasks.loop(seconds=30)
    async def call_work(channel):
        await channel.send("p!work")
    
    @tasks.loop(minutes=10)
    async def call_trivia(channel):
        await channel.send("p!trivia hard")
    
    @client.event
    async def on_ready():
        print("We are ready after socket connect")
        command_tasks = [call_work, call_trivia]
        for task in command_tasks: 
            if not task.is_running():  # on_ready может запускаться более чем один раз https://discordpy.readthedocs.io/en/stable/api.html#discord.on_ready
                print(f"Starting task {task.__name__}")
                task.start(client.get_channel(CHANNEL_ID))
    Ответ написан
    2 комментария