import discord
from discord.ext import commands
from discord.utils import get
from config import settings
import json
from random import randint
import os
import json_checker
import ranks
import auth_code
bot = commands.Bot(command_prefix=settings['prefix'])
print('Started')
@bot.event # Очки за скрин
async def on_message(ctx):
author = ctx.author
for attach in ctx.attachments:
await attach.save(f"{path}\\user_photos\\{attach.filename}")
print('Скачал файл...')
imgs = os.listdir(f'{path}\\user_photos\\') # проверка расширения файла
print(imgs)
filename, file_extension = os.path.splitext(f'{path}/user_photos/{imgs[0]}')
# filename = re.sub(f'{path}/user_photos/', '', filename, flags=re.DOTALL)
if not file_extension == '.png' and not file_extension == '.jpg':
embed = discord.Embed(
title=f'Ошибка',
description='Не подходящий формат файла',
colour=discord.Colour.gold()
)
embed.set_footer(text='Используйте формат PNG')
await ctx.channel.send(embed=embed)
users_data = list(json_checker.load_stats_data()) # получаем данные со stats.json
with open("stats.json", "w") as f: # Проверка на наличие пользователя в базе
user_is_not_exists = True
for user in users_data:
if user['author'] == ctx.author.id:
role_1 = author.guild.get_role(ranks.rank_give(user['exp'], user['hero'])) # Снятие настоящей роли
await author.remove_roles(role_1)
rand_exp = randint(1, 3)
user['exp'] += rand_exp
user_is_not_exists = False
role_1 = author.guild.get_role(ranks.rank_give(user['exp'], user['hero'])) # Выдача актуальной роли
await author.add_roles(role_1)
embed = discord.Embed(
title=f'"{author}"',
description=f' Вам начислено **{rand_exp} славы**',
colour=discord.Colour.gold()
)
await ctx.channel.send(embed=embed)
print('пользователю', author, f'Добавлено xp {rand_exp}')
if user_is_not_exists:
users_data.append({'author': ctx.author.id, 'exp': 1, 'hero': 0})
print('пользователь', author, 'зарегестрирован')
await ctx.channel.send('Вы успешно зарегестрированы!')
json.dump(users_data, f)
os.remove(f'{path}\\user_photos\\{attach.filename}')
print('Удалил файл...')
await bot.process_commands(ctx)
@bot.command() # Получить свою статистику
async def stat(ctx):
sleep(randint(2, 6))
author = ctx.author
users_data = list(json_checker.load_stats_data()) # получаем данные со stats.json
with open("stats.json", "w") as f: # Проверка на наличие пользователя в базе
user_is_not_exists = True
for user in users_data:
if user['author'] == ctx.author.id:
exp = user['exp']
hero = user['hero']
user_is_not_exists = False
def check(m):
return m.author.id == ctx.author.id
if exp >= 60 and hero == '0':
role_1 = author.guild.get_role(834011442079596564) # Выдача актуальной роли
await author.add_roles(role_1)
embed = discord.Embed(
title=f'Поздравляем "{author}"',
description='**Вы достигли ранга <@&834011146222436363>** \n*Выберите героя:* \n'
'1.<@&834011803486257174>\n2.<@&834011621458051072>\n3.<@&834012072110981130> ',
colour=discord.Colour.gold()
)
embed.set_footer(text='Напишите число')
await ctx.channel.send(embed=embed)
while hero == '0':
answer = await bot.wait_for("message", check=check)
hero = answer.content
if hero == '1' or hero == '2' or hero == '3':
user['hero'] = hero
else:
hero = '0'
embed = discord.Embed(
title=f'Ошибка"',
description='Отправьте число от 1 до 3',
colour=discord.Colour.gold()
)
await ctx.channel.send(embed=embed)
embed = discord.Embed(
title=f'Статистика "{author}"',
description=ranks.rank_show(exp, hero) + f'**Ваш уровень славы {exp}**',
colour=discord.Colour.gold()
)
embed.set_image(url=ranks.rank_pic(exp, hero))
await ctx.channel.send(embed=embed)
print('Пользователю', author, 'показана статистика')
json.dump(users_data, f)
if user_is_not_exists:
users_data.append({'author': ctx.author.id, 'exp': 0, 'hero': 0})
print('Пользователь', author, 'зарегестрирован')
await ctx.channel.send('Вы успешно зарегестрированы!')
json.dump(users_data, f)
@bot.command()
@commands.has_permissions(manage_guild=True)
async def reset(ctx):
users_data = list(json_checker.load_stats_data())
reset_users = len(users_data)
def check(m):
return m.author.id == ctx.author.id
key = randint(100, 999)
print(key)
code = auth_code.code(key)
embed = discord.Embed(
title=f'Вы уверены?',
description=f'Для подтверждения введите код: \n {code}',
colour=discord.Colour.gold()
)
embed.set_footer(text='Команда сбросит статистику всех игроков')
await ctx.channel.send(embed=embed)
answer = await bot.wait_for("message", check=check)
code = answer.content
if code == str(key):
with open("stats.json", "w") as f:
for user in users_data:
users = get(bot.get_all_members(), id=user['author'])
print(users)
role_1 = users.guild.get_role(ranks.rank_give(user['exp'], user['hero'])) # Снятие ролей
await users['author'].remove_roles(role_1)
users_data = []
json.dump(users_data, f)
embed = discord.Embed(
title=f'Успешно:white_check_mark:',
description=f'Сброшено {reset_users} аккаунтов',
colour=discord.Colour.gold()
)
await ctx.channel.send(embed=embed)
else:
embed = discord.Embed(
title=f'Неверный код',
description=f'Сброс отменен',
colour=discord.Colour.gold()
)
await ctx.channel.send(embed=embed)
bot.run(settings['token'])
user_image = Image.open(f"C:\\prog\\user_photos\\{imgs[0]}") # Проверка фото на соответсвие
check_image = Image.open('C:\\prog\\check_photos\\unknown.png')
result = ImageChops.difference(user_image, check_image)
print(result)
<PIL.Image.Image image mode=RGBA size=862x485 at 0x1A7A97E9BE0>