Вопрос Экономика discord.py

Начинающий
Статус
Оффлайн
Регистрация
12 Июл 2020
Сообщения
66
Реакции[?]
11
Поинты[?]
0
Всем привет.
Решил сделать систему репутаций уже сделал +rep \ -rep, но кое что зародилось у меня в голове.

Хочу чтобы:
Если пользователь достигал +REP > 25, то ему выдавалось бы роль "Хорошая репутация"
Как выдавать роль я знаю, но как сделать проверку через if что у пользователя уже более 25 +rep, ну прям не могу ничего придумать, надеюсь на вашу помощь.
 
Пользователь
Статус
Оффлайн
Регистрация
17 Мар 2021
Сообщения
400
Реакции[?]
102
Поинты[?]
0
Всем привет.
Решил сделать систему репутаций уже сделал +rep \ -rep, но кое что зародилось у меня в голове.

Хочу чтобы:
Если пользователь достигал +REP > 25, то ему выдавалось бы роль "Хорошая репутация"
Как выдавать роль я знаю, но как сделать проверку через if что у пользователя уже более 25 +rep, ну прям не могу ничего придумать, надеюсь на вашу помощь.
Такого рода дискорд ботами я не занимался, но попытаюсь помочь.
Колличество репутаций человека лучше хранить в бд (а где ещё?), рекомендую sqlite

есть два варианта
1. глобальная репутация (репутация не зависит от сервера)
2. серверная репутация (на каждом сервере разная репутация)
рассматривать буду 1 вариант т.к. легче реализовать
при командах +- реп проверить есть ли юзер id в бд (оценивали ли его раньше) если нет то создать
(примерный sqlite код: INSERT INTO USERS (ID, REP)VALUES ('discord uid', '0'))
потом обновить значение + или - 1
(примерный sqlite код: UPDATE USERS SET REP = 'rep val' WHERE UID = 'discord uid')
если да то обновить значение (см выше).
а проверять количество репы легко получить репу из бд и сравнить с числом
(примерный sqlite код получения репы: SELECT REP FROM USR WHERE UID = 'discord uid')
это примерный принцып работы, учти что я не рассмотрел кд команды так что можно будет легко накручивать репы
 
Начинающий
Статус
Оффлайн
Регистрация
12 Июл 2020
Сообщения
66
Реакции[?]
11
Поинты[?]
0
Такого рода дискорд ботами я не занимался, но попытаюсь помочь.
Колличество репутаций человека лучше хранить в бд (а где ещё?), рекомендую sqlite

есть два варианта
1. глобальная репутация (репутация не зависит от сервера)
2. серверная репутация (на каждом сервере разная репутация)
рассматривать буду 1 вариант т.к. легче реализовать
при командах +- реп проверить есть ли юзер id в бд (оценивали ли его раньше) если нет то создать
(примерный sqlite код: INSERT INTO USERS (ID, REP)VALUES ('discord uid', '0'))
потом обновить значение + или - 1
(примерный sqlite код: UPDATE USERS SET REP = 'rep val' WHERE UID = 'discord uid')
если да то обновить значение (см выше).
а проверять количество репы легко получить репу из бд и сравнить с числом
(примерный sqlite код получения репы: SELECT REP FROM USR WHERE UID = 'discord uid')
это примерный принцып работы, учти что я не рассмотрел кд команды так что можно будет легко накручивать репы
Забыл сказать, использую sqlite для хранение репутации игрока. В принципе я знаю как получать число из БД пользователя, мне именно создание проверки,
if игрок > rep[25] то он получает роль.
 
Undetected
Пользователь
Статус
Оффлайн
Регистрация
22 Июн 2019
Сообщения
178
Реакции[?]
63
Поинты[?]
8K
Забыл сказать, использую sqlite для хранение репутации игрока. В принципе я знаю как получать число из БД пользователя, мне именно создание проверки,
if игрок > rep[25] то он получает роль.
Написал как вспомнил, мб что-то не будет работать

Что-то типо такого:
from discord.utils import get

connection = sqlite3.connect('server.db')
cursor = connection.cursor()

async function rep_command(ctx, member):
    ... Код выдачи +реп
    result = cursor.execute("SELECT `REP` FROM `USR` WHERE `UID` = %s)", (member.id, ))
    user_rep = result.fetchone()
    if user_rep > 24:
        role = discord.utils.get (member.guild.roles , id = 722476920591351899) #ID Роли
        await member.add_roles (role)
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
12 Июл 2020
Сообщения
66
Реакции[?]
11
Поинты[?]
0
Написал как вспомнил, мб что-то не будет работать

Что-то типо такого:
from discord.utils import get

connection = sqlite3.connect('server.db')
cursor = connection.cursor()

async function rep_command(ctx, member):
    ... Код выдачи +реп
    result = cursor.execute("SELECT `REP` FROM `USR` WHERE `UID` = %s)", (member.id, ))
    user_rep = result.fetchone()
    if user_rep > 24:
        role = discord.utils.get (member.guild.roles , id = 722476920591351899) #ID Роли
        await member.add_roles (role)
Ага, вроде понял по этому примеру как реализовать. Спасибо сейчас буду пробовать
 
Начинающий
Статус
Оффлайн
Регистрация
12 Июл 2020
Сообщения
66
Реакции[?]
11
Поинты[?]
0
Написал как вспомнил, мб что-то не будет работать

Что-то типо такого:
from discord.utils import get

connection = sqlite3.connect('server.db')
cursor = connection.cursor()

async function rep_command(ctx, member):
    ... Код выдачи +реп
    result = cursor.execute("SELECT `REP` FROM `USR` WHERE `UID` = %s)", (member.id, ))
    user_rep = result.fetchone()
    if user_rep > 24:
        role = discord.utils.get (member.guild.roles , id = 722476920591351899) #ID Роли
        await member.add_roles (role)
1657743128437.png
Получилось, что то вроде этого, но роль после достижение отметки 5 не добавляется, хотя взял добавление роли с "on_member_join", скорее всего буду переписывать добавление роли, может поможет.
Написал как вспомнил, мб что-то не будет работать

Что-то типо такого:
from discord.utils import get

connection = sqlite3.connect('server.db')
cursor = connection.cursor()

async function rep_command(ctx, member):
    ... Код выдачи +реп
    result = cursor.execute("SELECT `REP` FROM `USR` WHERE `UID` = %s)", (member.id, ))
    user_rep = result.fetchone()
    if user_rep > 24:
        role = discord.utils.get (member.guild.roles , id = 722476920591351899) #ID Роли
        await member.add_roles (role)
Попробовал твой вариант добавление роли, такая же фигня не работает, значит получение цифры не идёт, но концепцию я вроде понял. Если есть ошибки буду в коде, то скажи, а то может я туплю
 
Начинающий
Статус
Оффлайн
Регистрация
12 Июл 2020
Сообщения
66
Реакции[?]
11
Поинты[?]
0
Написал как вспомнил, мб что-то не будет работать

Что-то типо такого:
from discord.utils import get

connection = sqlite3.connect('server.db')
cursor = connection.cursor()

async function rep_command(ctx, member):
    ... Код выдачи +реп
    result = cursor.execute("SELECT `REP` FROM `USR` WHERE `UID` = %s)", (member.id, ))
    user_rep = result.fetchone()
    if user_rep > 24:
        role = discord.utils.get (member.guild.roles , id = 722476920591351899) #ID Роли
        await member.add_roles (role)
написал команду +rep он стал кд давать ему роль
 
Начинающий
Статус
Оффлайн
Регистрация
12 Июл 2020
Сообщения
66
Реакции[?]
11
Поинты[?]
0
у тебя в коде проверка на user_rep > 4
Ну я поставил чисто для теста, чтобы при достижение 5 он выдавал роль, а выдаётся почему то сразу. Может я щас туплю, наверное надо отдохнуть, а то сижу, то один проект делаю, то другой.
 
Пользователь
Статус
Оффлайн
Регистрация
28 Фев 2019
Сообщения
655
Реакции[?]
143
Поинты[?]
32K
Всем привет.
Решил сделать систему репутаций уже сделал +rep \ -rep, но кое что зародилось у меня в голове.

Хочу чтобы:
Если пользователь достигал +REP > 25, то ему выдавалось бы роль "Хорошая репутация"
Как выдавать роль я знаю, но как сделать проверку через if что у пользователя уже более 25 +rep, ну прям не могу ничего придумать, надеюсь на вашу помощь.
При команде +реп делать проверки которые тебе нужны по типу повторной отправки, отправке самому себе, дальше получить кол-во репутаций из бд прибавить 1 сравнить с 25 выдать роль и сохранить?
 
Пользователь
Статус
Оффлайн
Регистрация
22 Май 2022
Сообщения
203
Реакции[?]
43
Поинты[?]
6K
Забыл сказать, использую sqlite для хранение репутации игрока. В принципе я знаю как получать число из БД пользователя, мне именно создание проверки,
if игрок > rep[25] то он получает роль.
При получение +реп сделай или отмены этого +реп сделай получение всех репов и обновляй ему роль, или сделай кронтаб себе который будет проверять каждые 5 минут по тайменру функцию который будет чекать всех юзеров и выдавать роль если у человека есть и он не имеет уже активной роли
 
Начинающий
Статус
Оффлайн
Регистрация
12 Июл 2020
Сообщения
66
Реакции[?]
11
Поинты[?]
0
При получение +реп сделай или отмены этого +реп сделай получение всех репов и обновляй ему роль, или сделай кронтаб себе который будет проверять каждые 5 минут по тайменру функцию который будет чекать всех юзеров и выдавать роль если у человека есть и он не имеет уже активной роли
Вроде в discord.py можно создать свой events, так что попробую вариант с проверкой каждые 5 минут.
При команде +реп делать проверки которые тебе нужны по типу повторной отправки, отправке самому себе, дальше получить кол-во репутаций из бд прибавить 1 сравнить с 25 выдать роль и сохранить?
Уже челик сверху дал код, так что я вроде понял как это реализовать, но всё равно спасибо<3
 
Сверху Снизу