Я работаю над ботом для прокачки. Я обнаружил серьезную проблему с получением опыта, и ею можно чрезвычайно злоупотреблять. Я хочу, чтобы у него было время восстановления после того, как пользователь отправляет сообщение, поэтому, когда пользователь спамит в канале для фарма XP, у него есть время восстановления 0,5 секунды для каждого сообщения, чтобы предотвратить спам. Если вы рассылаете много спама, вы легко можете попасть на первое место, а я не хочу, чтобы это произошло. С ним работает все: получение опыта, таблица лидеров и сообщение о повышении уровня. Я искал в Интернете ответ на этот вопрос, и ни один из них не помог. Кто-нибудь знает? Пожалуйста и спасибо вам!!!
Код:
@bot.event асинхронная защита on_message(сообщение): если не message.author.bot: # при открытии файла указываем кодировку utf-8 с open('level.json','r',coding='utf-8') как f: пользователи = json.load(f) ждут update_data(пользователи, message.author,message.guild) ждут add_experience(пользователи, message.author, 4, message.guild) await level_up(пользователи, сообщение.автор, сообщение.канал, сообщение.гильдия) # при записи файла указываем кодировку utf-8 с open('level.json','w',coding='utf-8') как f: json.dump(пользователи, е) ожидайте bot.process_commands (сообщение) асинхронное определение update_data (пользователи, пользователь, сервер): если нет str(server.id) у пользователей: пользователи[str(server.id)] = {} если нет str(user.id) в user[str(server.id)]: пользователи[str(server.id)][str(user.id)] = {} пользователи[str(server.id)][str(user.id)]['опыт'] = 0 пользователи[str(server.id)][str(user.id)]['level'] = 1 elif не str(user.id) в user[str(server.id)]: пользователи[str(server.id)][str(user.id)] = {} пользователи[str(server.id)][str(user.id)]['опыт'] = 0 пользователи[str(server.id)][str(user.id)]['level'] = 1 async def add_experience(пользователи, пользователь, опыт, сервер): пользователи[str(user.guild.id)][str(user.id)]['опыт'] += опыт async def level_up(пользователи, пользователь, канал, сервер): опыт = пользователи[str(user.guild.id)][str(user.id)]['опыт'] lvl_start = пользователи[str(user.guild.id)][str(user.id)]['уровень'] lvl_end = int(опыт ** (1/4)) if str(user.guild.id) != '757383943116030074': если lvl_start < lvl_end: awaitchannel.send('
{ "757383943116030074": { "123456789012345678": { "опыт": 0, "1-й уровень } } }
Мобильная версия