Задать вопрос
@Kirill_Safe

Как сделать автовыдачу «очков» в переменные?

Делаю экономического бота на discord.py, и мне нужно было настроить автоматическую выдачу "денег" всем пользователям,зависимо от их "заработка", написал такой код,таймер все проходит и он начинает заново работать но файл не изменяет
Подскажите.как пофиксить?

spoiler
import os
import discord, asyncio, random, time, sys, datetime
from datetime import datetime, timedelta
from discord.ext import commands, tasks
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix='$', intents=intents)


@tasks.loop(minutes=0.1)
async def update_income():
    print("income!")
    for guild in bot.guilds:
        for member in guild.members:
            if not member.bot:  # Пропускаем ботов
                user_id = str(member.id)
                user_data = read_user_data(user_id)
                # Добавляем доход к балансу пользователя
                income_amount = int(user_data['income'])
                user_data['balance'] = str(int(user_data['balance']) + income_amount)
                write_user_data(user_id, user_data)
                # Отправляем сообщение пользователю в личные сообщения
                try:
                    await member.send(f"Ваш баланс был пополнен на {income_amount} монет.")
                except discord.Forbidden:
                    print(f"Не удалось отправить сообщение пользователю {member.id}.")

@bot.event
async def on_ready():
    print('Ты залогинен под {0.user}'.format(bot))
    update_income.start()
def read_user_data(user_id):
    try:
        with open(f'{user_id}.txt', 'r') as file:
            data = {}
            for line in file:
                if '=' in line:
                    key, value = line.strip().split('=', 1)
                    data[key.strip()] = value.strip()
            # Проверяем, что ключ 'balance' существует и устанавливаем его в 0, если он не существует
            data['balance'] = data.get('balance', '0')
            data['nickname'] = data.get('nickname', 'unknown')
            data['last_work'] = data.get('last_work', '0')
            data['income'] = data.get('income', '0')
            return data
    except FileNotFoundError:
        return {'balance': '0', 'nickname': 'unknown', 'last_work': '0', 'income': '0'}
# Функция для записи данных пользователя в файл
def write_user_data(user_id, data):
    with open(f'{user_id}.txt', 'w') as file:
        for key, value in data.items():
            file.write(f'{key} = {value}\n')
>
  • Вопрос задан
  • 74 просмотра
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы