Команда Discord Bot python 3.6 warn - PullRequest
0 голосов
/ 02 октября 2018

Я работаю над ботом модератора.Сделал всю команду, кроме команды warn.Может ли кто-нибудь помочь мне сделать команду предупреждения.

Если участник (с правами управляющего члена) набирает ?warn @user reason, бот сохранит предупреждение в файле .json.

И если пользователь скажет ?warnings @user, бот покажетпредупреждения пользователя.

1 Ответ

0 голосов
/ 03 октября 2018

Вы можете сделать что-то вроде этого

import discord
from discord.ext.commands import commands,has_permissions, MissingPermissions
import json

with open('reports.json', encoding='utf-8') as f:
  try:
    report = json.load(f)
  except ValueError:
    report = {}
    report['users'] = []

client = discord.ext.commands.Bot(command_prefix = '?')

@client.command(pass_context = True)
@has_permissions(manage_roles=True, ban_members=True)
async def warn(ctx,user:discord.User,*reason:str):
  if not reason:
    await client.say("Please provide a reason")
    return
  reason = ' '.join(reason)
  for current_user in report['users']:
    if current_user['name'] == user.name:
      current_user['reasons'].append(reason)
      break
  else:
    report['users'].append({
      'name':user.name,
      'reasons': [reason,]
    })
  with open('reports.json','w+') as f:
    json.dump(report,f)

@client.command(pass_context = True)
async def warnings(ctx,user:discord.User):
  for current_user in report['users']:
    if user.name == current_user['name']:
      await client.say(f"{user.name} has been reported {len(current_user['reasons'])} times : {','.join(current_user['reasons'])}")
      break
  else:
    await client.say(f"{user.name} has never been reported")  

@warn.error
async def kick_error(error, ctx):
  if isinstance(error, MissingPermissions):
      text = "Sorry {}, you do not have permissions to do that!".format(ctx.message.author)
      await client.send_message(ctx.message.channel, text)   

client.run("BOT_TOKEN")

Где вы сохраняете все отчеты пользователя в файле с именем reports.json, и вместо manage_roles=True, ban_members=True внутри @has_permissions вы можете поместить что-нибудь из документация

...