Discord.py, как выдать роль при использовании команды?
from SimpleQIWI import *
from time import sleep
import discord
token = "Token" # https://qiwi.com/api
phone = "number"
class MyClient(discord.Client):
async def on_ready(self):
print('Logged on as', self.user)
async def on_message(self, message):
# don't respond to ourselves
if message.author == self.user:
return
if message.content == 'ping':
await message.channel.send('pong')
if message.content == 'pay':
api = QApi(token=token, phone=phone)
price = 1 # Минимальное значение при котором счет будет считаться закрытым
comment = api.bill(price) # Создаем счет. Комментарий с которым должен быть платеж генерируется автоматически, но его можно задать # параметром comment. Валютой по умолчанию считаются рубли, но ее можно изменить параметром currency
await message.channel.send("Переведите %i рублей на счет %s с комментарием %s" % (price, phone, comment))
api.start() # Начинаем прием платежей
while True:
if api.check(comment): # Проверяем статус
await message.channel.send("Платёж получен!")
Где то на этом моменте он должен выдать роль по id(человеку который
использовал команду
break
time.sleep(1)
api.stop()
client = MyClient()
client.run('Token')
Ответы (1 шт):
Перед добавлением возможности выдачи ролей удостоверьтесь в том, что:
- У бота есть право "Управлять ролями".
- Роль бота в списке должна находиться выше ролей, которые он может выдавать.
Код:
async def on_message(self, message):
if message.content == 'pay':
# здесь ваш код, включительно до выдачи роли
while True:
if api.check(comment): # Проверяем статус
await message.channel.send("Платёж получен!")
author = message.author # получаем автора сообщения
guild = self.get_guild(id) # получаем объект сервера*
role = guild.get_role(id) # получаем объект роли*
# как получить id читайте ниже
await author.add_roles(role) # выдаем автору роль
await message.channel.send(f"{author.mention}, роль выдана!")
Это только на случай, если вы тестируете бота на одном сервере. Если планируете его подключение к нескольким серверам, где id вам могут быть неизвестны, нужно будет сначала программно получать id сервера, затем список всех его ролей и выбирать нужную роль уже из них. Пожалуйста, читайте документацию, там есть абсолютно все, что вам нужно знать :)
Чтобы получить id канала, нужно в настройках дискорда, на вкладке "Внешний вид", включить пункт "Режим разработчика". После этого, кликнув правой кнопкой мыши на любой объект, в самом низу у вас будет кнопка "Копировать ID". Так можно получать id пользователей, каналов, серверов и т.п