Для управления запоминанием данных на нескольких серверах Discord, лучше использовать структуры данных, которые будут хранить информацию отдельно для каждого сервера (гильдии). Это предотвратит перезапись данных при использовании команд на разных серверах.
Давайте создадим словарь, который будет использовать ID сервера (гильдии) в качестве ключа и хранить информацию о канале и роли в виде словаря. Вот пример модифицированного кода:
```python
import discord
from discord.ext import commands
import asyncio
bot = commands.Bot(command_prefix='!')
# Словарь для хранения настроек бота на каждом сервере
server_settings = {}
@bot.command()
async def explosion_channel(ctx: discord.ApplicationContext, id_channel: int, id_role: int):
guild_id = ctx.guild.id # Получаем ID сервера
# Сохраняем настройки для сервера (если еще не было настроек)
if guild_id not in server_settings:
server_settings[guild_id] = {'channel_id': None, 'role_id': None}
# Сохраняем данные канала и роли
server_settings[guild_id]['channel_id'] = id_channel
server_settings[guild_id]['role_id'] = id_role
await ctx.respond('Канал и роль приняты!')
await asyncio.sleep(3)
await ctx.delete()
@bot.command()
async def get_explosion_settings(ctx: discord.ApplicationContext):
guild_id = ctx.guild.id # Получаем ID сервера
# Проверяем, есть ли настройки для сервера
if guild_id in server_settings:
channel_id = server_settings[guild_id]['channel_id']
role_id = server_settings[guild_id]['role_id']
await ctx.respond(f'Канал: {channel_id}, Роль: {role_id}')
else:
await ctx.respond('Настройки еще не заданы для этого сервера.')
# Запускаем бота
bot.run('YOUR_TOKEN')
```
### Объяснение кода
1. **Словарь `server_settings`:** Мы используем словарь, где ключом является ID сервера (гильдии), а значением — другой словарь, содержащий `channel_id` и `role_id`.
2. **Команда `explosion_channel`:** При вызове этой команды бот запоминает указанное ID канала и ID роли для конкретного сервера.
3. **Команда `get_explosion_settings`:** Это дополнительная команда, чтобы показать текущие настройки канала и роли для сервера. Она проверяет, есть ли настройки для данного сервера.
### Важно
- Обратите внимание, что этот метод хорош для небольших ботов, особенно без необходимости долгосрочного хранения данных. Если вам нужно больше данных или сложная логика, рассмотрите возможность использования базы данных.
- Убедитесь, что ваш бот имеет соответствующие разрешения для работы с Discord (например, доступ к каналам и ролям).
Теперь каждая гильдия сможет иметь свои уникальные настройки, и они не будут перезаписываться.