Парсер не записывает данные в json
Почему-то парсер не записывает данные в json, что не так?
import discord
from discord.ext import commands
import json
import os
# Токен бота
TOKEN = ' '
# ID канала, в котором бот будет парсить сообщения
CHANNEL_ID = 123456789012345678 # Замените на ID нужного канала
# Имя файла JSON
JSON_FILE = 'message_ids.json'
# ID роли, которую нужно выдавать
ROLE_ID = 987654321012345678 # Замените на ID нужной роли
# Создание бота
bot = commands.Bot(command_prefix='!', intents=discord.Intents.default())
# Глобальный список для хранения ID
message_ids = []
# Загрузка данных из JSON (если файл существует)
if os.path.exists(JSON_FILE):
with open(JSON_FILE, 'r') as f:
message_ids = json.load(f)
# Создание таблицы в базе данных (если она не существует)
@bot.event
async def on_ready():
print(f'Бот запущен как {bot.user}')
# Проверка участников при запуске бота
await check_members(bot)
# Обработка сообщений
@bot.event
async def on_message(message):
if message.channel.id == CHANNEL_ID and message.author.bot is False:
# Проверка, является ли сообщение нужного типа
if message.content.startswith('№'):
# Получение ID из сообщения
new_message_ids = message.content.split('n')[1:]
# Добавление новых ID в глобальный список, избегая дубликатов
for new_id in new_message_ids:
try:
new_id = int(new_id)
if new_id not in message_ids:
message_ids.append(new_id)
except ValueError:
await message.channel.send(f'Неверный формат ID: {new_id}')
# Запись обновленного списка в файл JSON
try:
with open(JSON_FILE, 'w') as f:
json.dump(message_ids, f)
except json.JSONDecodeError as e:
await message.channel.send(f"Ошибка при записи в файл: {e}")
except Exception as e:
await message.channel.send(f"Ошибка: {e}")
# Отправка подтверждения в нескольких сообщениях
confirmation_message = "ID успешно добавлены в файл."
max_length = 2000 # Максимальная длина сообщения в Discord
parts = [confirmation_message[i:i + max_length] for i in range(0, len(confirmation_message), max_length)]
for part in parts:
await message.channel.send(part)
# Функция для проверки участников
async def check_members(bot):
for guild in bot.guilds:
for member in guild.members:
if member.id in message_ids:
role = guild.get_role(ROLE_ID)
if role is not None:
await member.add_roles(role)
await member.send(f'Вам была выдана роль {role.name}.')
# Запуск бота
bot.run(TOKEN)```
Ответы (1 шт):
Автор решения: Unclear
→ Ссылка
У вас в коде строка new_message_ids = message.content.split('n')[1:]
выдаёт пустой список, как я понимаю, он должен содержать ID которые должны добавляться в json файл. Вместо этой строки я написал new_message_ids = message.content.split('№')[1:]