• Как сделать логи банов?

    @davGro
    Шушуть люблю питон, по шушуть тыкаю где-то год.
    Лучше не хранить ничего в файлах, а создать таблицу в бд с колонками banTimeStart memberUid reason authorOfBan duration и channel.

    banTimeStart это int(time.time()) на момент внесения записи в таблицу.
    Можно удалять разбаненых из таблицы, а можно добавить столбец unbanned где будет 0 если человек ещё в бане и 1 если человек разбанен.
    Каждую минуту (или чаще, на ваше усмотрение) делать запрос в базу на подобии
    from time import time
    ...
    cursor.execute("""SELECT memberUid, channel from bans where banTimeStart + duration <= {0}""".format(int(time()))

    Данный запрос будет выводить данные о забаненных, чье время бана уже истекло
    Ответ написан
  • Почему не работает модуль colorama?

    @davGro
    Шушуть люблю питон, по шушуть тыкаю где-то год.
    Назови скрипт не как colorama, иначе ты фактически импортируешь из скрипта же себя. Назови просто example.py
    Ответ написан
  • Как найти произведение элементов списка после максимального элемента?

    @davGro
    Шушуть люблю питон, по шушуть тыкаю где-то год.
    Можно уточнить?
    Что из себя представляет задача?
    test_list = [1, 3, 7, 2, 6, 5]
    7 - максимальный элемент в списке, все остальные после него перемножить, то есть 2 6 и 5?
    Ответ написан
  • Как качать файл через время?

    @davGro
    Шушуть люблю питон, по шушуть тыкаю где-то год.
    Selenium, режим headless. Гугл в помощь, о чем гуглить я написал. Вам нужно будет просто создать скрипт, кликающий на элемент и соответственно переходящий по ссылке автоматической загрузки.
    А там уже работа вашего используемого браузера, думаю обязательно должна быть выставлена Автоматическая загрузка, а не указывая путь для загрузки. Если итак стоит, то трогать её не надо :)
    Ответ написан
    Комментировать
  • Как начать раздачу торрента на python?

    @davGro
    Шушуть люблю питон, по шушуть тыкаю где-то год.
    Советую прочитать ответ здесь: https://ru.stackoverflow.com/questions/1239765/Как...

    updated:
    Вероятно, вам стоит запустить ваш файл и обязательно указать папку для загрузки ту, где уже лежат ваши файлы для раздачи

    upd2:
    Вам стоит использовать python-qbittorrent чтобы начать загрузку вашего файла сразу же. Перед этим обязательно нужно активировать веб интерфейс, это несложно: *клик*
    from qbittorrent import Client
    
    qb = Client('http://127.0.0.1:8080/')
    
    qb.login()
    dl_path = 'special-dir/'
    
    torrent_file = open('my-torrent-file.torrent', 'rb')
    qb.download_from_file(torrent_file, savepath=dl_path)

    Чуть позже могу написать полный код под вашу нужду :)
    Ответ написан
  • Почему не приходит результат post-запроса (aiohttp, asyncio)?

    @davGro
    Шушуть люблю питон, по шушуть тыкаю где-то год.
    Вероятно Ваш цикл игнорируется, потому что с разметкой у вас все худо

    # ваш код
      async def task_check_website(self):
              while True:
                  _data = {
    
    # правильная разметка
        async def task_check_website(self):
            while True:
                _data = {

    Разница заметна, не так ли?
    Используйте правильное количество пробелов, на каждом уровне по 4, перед циклом в вашем случае должно быть 8 пробелов, тем более это влияет на читаемость кода.

    Проблема с разметкой у вас не только в этой функции, dummy_task у вас также на непонятном уровне. Не используйте табы, используйте по 4 пробела вместо табов. В ином случае ваш интерпретатор выдаст вам ошибку
    Ответ написан
  • Как сделать авторизацию в Postman?

    @davGro
    Шушуть люблю питон, по шушуть тыкаю где-то год.
    Адрес указан верно? Перехожу по ссылке api.sb.mdlp.crpt.ru и в ответ пустота.

    Предлагаю:
    Указать данные в https://sb.mdlp.crpt.ru/#/auth/signin, нажав на вход по логину и паролю, но не отправлять. Открываем режим разработчика, вкладка network, далее нажимаем на вход с указанными данными и следим что отправляет наш браузер при авторизации. Выбираем любой запрос, листаем вниз и видим данные: логин и пароль.
    И уже смотрим, выбрав верный запрос: на какой url отправляются наши данные, какие параметры передаются в get или post запросе. Удачи) Надеюсь помог
    Ответ написан
    Комментировать
  • Как обрабатывать данные асинхронно, а отдавать в порядке поступления?

    @davGro
    Шушуть люблю питон, по шушуть тыкаю где-то год.
    Костыльное решение, но можно в словарь добавлять готовые сообщения с указанием его номера, а потом отправлять их в порядке очереди.
    Ниже псевдокод примера:
    queue = {}
    queue[2] = 'message from cor 2'
    queue[1] = 'message from cor 1' 
    queue[3] = 'message from cor 3' 
    # >>> queue
    # {2: 'message from cor 2', 1: 'message from cor 1', 3: 'message from cor 3'}
    
    queue = dict(sorted(queue.items()))
    # >>> queue
    #     {1: 'message from cor 1', 
    #      2: 'message from cor 2', 
    #      3: 'message from cor 3'}
    ...
    for message in queue:
        await send(queue.pop(0)) # отправляет первый элемент
                                 # в словаре, удаляя его, он нам не нужен более
    
    # таким образом, сообщения отправятся в заданном порядке,
    # главное сохранять их в нужном :)

    Спасибо этой странице за решение сортировки словаря по ключу
    Я надеюсь, мое решение вам помогло, я старался над ним
    Ответ написан
    Комментировать
  • Бот игнорирует триггер если в сообщении есть пробел, как исправить?

    @davGro
    Шушуть люблю питон, по шушуть тыкаю где-то год.
    Лучшим решением будет такое:
    goodNight = ['доброй ночи']
    botMen = ['бот', 'bot']
    # пишем все строки в нижнем регистре 
    # (маленькими буквами) для корректного сравнения в будущем
    
    
    @Bot.event
    async def on_message(message, txt: message.content, send: message.channel.send): # упрощаем себе жизнь
        if message.author == Bot.user:
            return
        else:
            content = " ".join(txt.lower().split()) 
            """
            строкой выше мы из " ДоБрой НочИ " делаем "доброй ночи"
            то есть убираем лишние пробелы в начале и в конце
            и приводим к нижнему регистру для корректного сравнения"""
            if content in goodNight:
                await send('Ты уже уходишь или это ночное приветствие? %s' % Bot.get_emoji(755856809436250253))
            if content in botMen:
                await send('Да, я вас слушаю %s' % Bot.get_emoji(810645595089535087))
        await Bot.process_commands(message)


    Не знаю на каком фреймворке вы пишете, но подозреваю что в нем можно писать return "Спокойной ночи" вместо await message.channel.send('Спокойной ночи'). И да, как приметили до меня, переменные не называют с большой буквы, только классы. Рекомендую пройти небольшой курс для самый начинающих в питоне. Думаю вам будет полезно.
    Ответ написан
  • Как вытащить email со страницы?

    @davGro
    Шушуть люблю питон, по шушуть тыкаю где-то год.
    Костыльное решение, но рабочее для вашего случая:

    test_string = '<a href="/cdn-cgi/l/email-protection#2d44585b6d414c404c035942405e46035f58" title="iuv@lama.tomsk.ru"><span itemprop="email"><span class="__cf_email__" data-cfemail="523b2724123e333f337c263d3f21397c2027">[email&#160;protected]</span>'
    
    email = test_string.split('title="')[1].split('"')[0]

    Есть готовые регулярные выражения для нахождения e-mail адресов, от самых простых до очень больших и сложных.

    По примеру этого решения можно сделать так:

    >>> import re
    >>> test_string = '<a href="/cdn-cgi/l/email-protection#2d44585b6d414c404c035942405e46035f58" title="iuv@lama.tomsk.ru"><span itemprop="email"><span class="__cf_email__" data-cfemail="523b2724123e333f337c263d3f21397c2027">[email&#160;protected]</span>'
    >>> match = re.findall(r'[\w\.-]+@[\w\.-]+', test_string)
    >>> match
    ['iuv@lama.tomsk.ru']


    Надеюсь, мой ответ вам помог
    Ответ написан
    Комментировать