Задать вопрос
  • Как запустить асинхронную функцию параллельно теллеграм боту?

    Vindicar
    @Vindicar
    Herben, у бота есть реакция на событие "бот запущен"? Вот там и запускай.
  • Как исправить "pymysql.err.ProgrammingError: Cursor closed"?

    Vindicar
    @Vindicar
    Artem4442, проверь запросы.
    1. Ты не забыл указать первичный ключ в таблице пользователей?
    2. Где ты подставляешь значение id для пользователя? В приведённом тобой запросе вообще подстановки нет.
  • Как заставить бота удалять ссылки?

    Vindicar
    @Vindicar
    Написать соответствующий программный код.

    Не, серьёзно. Ты даже не сказал, какую библиотеку используешь.
  • Как правильно создать признаки Хаара?

    Vindicar
    @Vindicar
    resah, ну, так это и есть отдельный признак Хаара. Не пойму, почему ты описываешь его как что-то отличающееся.
  • Как правильно создать признаки Хаара?

    Vindicar
    @Vindicar
    resah, А! Вот, теперь понял про что ты. Да, тут у меня пробел в знаниях.
    Но у тебя есть база для обучения. Гипотетически ты мог бы сгенерировать 100 случайных признаков, выбрать тот, который даёт наибольшую разницу по суммарному отклику между окнами, где искомый объект заведомо есть, и окнами, где его заведомо нет. При этом при подсчёте суммарного отклика учитывать веса окон (из бустинга), и их количества (так как отрицательных окон будет сильно больше).
    Это будет неэффективно, но со временем наберётся достаточно признаков. Особенно если после каждого раунда бустинга удалять признаки, которые имеют слишком маленький вес.
  • Как правильно создать признаки Хаара?

    Vindicar
    @Vindicar
    resah, соответственно, проблема в выборе удачных признаков, так как возможных комбинаций их параметров и впрямь очень много. Тут уже в дело вступает бустинг, который строит комбинацию из нескольких признаков, но по нему я не могу рассказать подробно.
  • Как правильно создать признаки Хаара?

    Vindicar
    @Vindicar
    resah, тебе пересказать как признаки Хаара работают? Не. ну я могу попробовать...
    Каждый признак - это карта из трёх значений. Условно, 0 - пиксель игнорируется, 1 - пиксель считается "положительным", -1 - пиксель считается "отрицательным".
    Тебе нужно найти сумму яркостей пикселей в "положительных" областях, и вычесть из неё сумму яркостей пикселей в "отрицательных" областях, а потом сравнить разность с порогом. Если разность выше порога, то признак "сработал", т.е. дал отклик. (Для скорости обычно используют интегральное представление изображения.)
    Таким образом, каждый элементарный признак имеет несколько параметров - значение порога, описание формы(типа белое над черным, белое справа, белое в середине, белое по диагонали и т.д.), позиция и размер признака внутри окна выбранного тобой размера. Соответственно ты проходишь по изображению окном такого размера, и накладываешь этот признак на каждое окно. Это даст тебе отклик для данной позиции окна. По значению отклика можно судить, где на изображении встречается желаемое распределение яркостей.
  • Как получить код страницы?

    Vindicar
    @Vindicar
    Maxwell012, ну может и так. Ты же не озаботился сказать что за данные, фиксированный ли у них порядок, как производится сравнение...
  • Как сделать так, чтобы дискорд бот не трогал права администратора, модератора и не привлекал их к нарушению?

    Vindicar
    @Vindicar
    Igor Pecherskih, ну так думай, что тут скажешь. Я уже написал, что нужно сделать - выбрать набор прав, которыми должен обладать модератор - скажем, управление сообщениями и пользователями - и проверить их наличие у автора сообщения. Если права есть, не трогаем сообщение.
  • Как получить код страницы?

    Vindicar
    @Vindicar
    Maxwell012, уж наверно проще сравнить два списка значений, чем большой кусок текста, в котором чёрт знает что ещё может измениться.
  • Как получить код страницы?

    Vindicar
    @Vindicar
    Maxwell012, что тебе мешает найти нужные элементы, сохранить отдельно их значения, а потом сравнивать их со значениями в новой странице?
  • Как купить роль по "айди"?

    Vindicar
    @Vindicar
    LxneSamurai, без понятия, никогда эмбеды не использовал. А что у тебя не так с индексом, там же просто?
    CREATE TABLE IF NOT EXISTS shop(
            id BIGINT PRIMARY KEY,
            idx INT UNIQUE,
            cost BIGINT
    )


    async def buy(ctx, index: int):
        ....
        data = cursor.execute("SELECT cost FROM shop WHERE idx = ?", (index, )).fetchall()
        # ну и далее по тексту
  • Как купить роль по "айди"?

    Vindicar
    @Vindicar
    LxneSamurai, я имею ввиду, какую команду вводишь.
    !buy qqq должно сработать.
    А порядковый номер... не, ну ты можешь попробовать сделать
    async def buy(ctx, role: typing.Union[discord.Role, int, None] = None):
        if role is None:
            # роль не указана
        elif isinstance(role, int):
            # роль по индексу
        else:
            # роль - это discord.Role, смотрим по role.id

    Но не факт, что это сработает. Уж проще тогда вручную анализировать строку.
    async def buy(ctx, *, role: str):
        role = role.strip()
        if not role:
            # роль не указана
            return
        try:
            role_number = int(role)
        except ValueError:
            # ищем роль в списке ролей гильдии по имени
        else:
            # роль по индексу
  • Как купить роль по "айди"?

    Vindicar
    @Vindicar
    LxneSamurai, как называется роль, и какой командой ты пытаешься её купить?
    Преобразователь discord.Role принимает пинг, имя роли или discord id роли.
  • Как купить роль по "айди"?

    Vindicar
    @Vindicar
    LxneSamurai, Если ты изменил структуру таблицы, грохни файл с БД. CREATE IF NOT EXIST не отредактирует таблицу, если она уже существует, но имеет не такую структуру.
  • Как купить роль по "айди"?

    Vindicar
    @Vindicar
    LxneSamurai, далее, теперь логика работы. При покупке роли проверяем:
    1. Что такая роль существует в магазине, заодно выбираем её стоимость
    # обрати внимание, вот как правильно вставлять параметры в запрос
    data = cursor.execute("SELECT cost FROM shop WHERE id = ?", (role.id, )).fetchall()
    if not data:
        #сообщаем что такая роль не продаётся
        return
    cost = data[0][0]  #роль есть, вот её цена

    2. Проверяем, что у пользователя такой роли ещё нет:
    if role in ctx.member.roles:
        # сообщаем, что роль уже есть
        return

    3. Проверяем, что у пользователя хватит денег:
    # обрати внимание, вот как правильно вставлять параметры в запрос
    data = cursor.execute("SELECT cash FROM users WHERE id = ?", (ctx.member.id, )).fetchall()
    if not data:
        #сообщаем что такого пользователя нет
        return
    cash = data[0][0]  #пользователь есть, вот его деньги
    if cost > cash:
        # сообщаем, что денег мало
        return

    4. Проводим продажу
    # обрати внимание, вот как правильно вставлять параметры в запрос
    cursor.execute("UPDATE users SET cash = cash - ? WHERE id = ?", (cost, ctx.member.id))
    # и выдаём роль
  • Как купить роль по "айди"?

    Vindicar
    @Vindicar
    LxneSamurai, ну users - допустим. Но опять же, зачем тебе server_id если ты не планируешь поддержку нескольких серверов.
    В shop неясно зачем тебе отдельный id, если у тебя есть естественный ключ - dicord id роли уже гарантированно уникален, как и discord id пользователя.
    Ограничением первичного ключа PRIMARY KEY лучше не пренебрегать, так как оно гарантирует, что в разных строках будут разные значения этого поля или комбинации полей. Например, без него у тебя может быть несколько записей для одного пользователя, или для одной роли.
    Аналогично, FOREIGN KEY указывает, что это поле должно ссылаться на первичный ключ какой-то строки в указанной таблице, и не может иметь произвольное значение.

    Без таблицы Purchases можно обойтись, в принципе. Дискорд всё равно хранит роли.
    Т.е. у тебя будет что-то типа
    CREATE TABLE IF NOT EXISTS users(
            name TEXT,
            id BIGINT PRIMARY KEY,
            cash BIGINT,
            rep INT,
            lvl INT
    )
    CREATE TABLE IF NOT EXISTS shop(
            id BIGINT PRIMARY KEY,
            cost BIGINT
    )
  • Как купить роль по "айди"?

    Vindicar
    @Vindicar
    LxneSamurai, вот. Т.е. и впрямь 1. Теперь подумаем над таблицами.
    Есть таблица баланса:
    CREATE TABLE Users (
        id INT PRIMARY KEY,
        cash FLOAT NOT NULL);

    Есть таблица ролей:
    CREATE TABLE Shop (
        role_id INT PRIMARY KEY,
        price FLOAT NOT NULL);

    Есть таблица покупок:
    CREATE TABLE Purchases( 
        user INT NOT NULL,
        role INT NOT NULL,
        FOREIGN KEY (user) REFERENCES (Users.id),
        FOREIGN KEY (role) REFERENCES (Roles.id),
        PRIMARY KEY (user, role)
    );

    У тебя таблицы примерно так создаются?
  • Как купить роль по "айди"?

    Vindicar
    @Vindicar
    LxneSamurai, так, т.е. один сервер.
    Но зачем тогда вносить в БД ctx.guild.id?