Вопрос Бот для дискорда, Python

Начинающий
Статус
Оффлайн
Регистрация
20 Окт 2019
Сообщения
28
Реакции[?]
3
Поинты[?]
0
Пишу бота через ИИ для мафии в дискорде для большего удобства расскидывания ролей каждому игрок. Ниже код который использую и запрос/ответ в чате с ИИ

Запрос:
Напиши мне бота на пайтоне для дискорда
Бот должен уметь менять никнейм Ведущему и игрокам. Ведущий выбирается в специальном окне в основном чате и после выбора бот должен изменить никнейм выбранного участника на "!Ведущий", а игрокам выдать порядковый номер 1, 2, 3 и т.д.
Бот должен уметь раздавать каждому игроку, который находится в определенном голосовом канале, роли - мафия, доктор, шериф, путана и мирный житель. Роли должны писаться в ЛС игроку, например тот игрок кому выпала роль мафии, ему в лс от бота придет сообщение о том что он мафия. Не должно быть такого чтобы каждому игроку писалась информация о том у кого какая роль.
Все роли игроков должны отправляться в ЛС ведущему. Например: игрок 1 - мафия, игрок 4 - мирный житель

Ответ:
Создание такого бота для Discord на Python требует использования библиотеки discord.py, которая позволяет взаимодействовать с API Discord. Предполагая, что вы уже установили эту библиотеку, вот пример кода, который реализует описанные вами функции.

Прежде всего, убедитесь, что у вас есть токен вашего бота и вы добавили необходимые разрешения, чтобы бот мог управлять ролями и изменять никнеймы.

Вот простой пример кода, который делает то, что вы описали:
Python:
import discord
from discord.ext import commands
import random

intents = discord.Intents.default()
intents.members = True  # Необходимо, чтобы бот мог управлять участниками и ролями

bot = commands.Bot(command_prefix='!', intents=intents)

# Список ролей
roles = ["мафия", "доктор", "шериф", "путана", "мирный житель"]
role_dict = {}

@bot.event
async def on_ready():
    print(f'Мы вошли как {bot.user}')

@bot.command(name='выбрать_ведущего')
@commands.has_permissions(manage_roles=True)
async def выбрать_ведущего(ctx, member: discord.Member):
    await member.edit(nick="!Ведущий")
    await ctx.send(f'{member.mention} теперь ведущий!')

    # Присваиваем номера всем участникам голосового канала
    voice_channel = member.voice.channel
    players = [m for m in voice_channel.members if not m.bot]

    for i, player in enumerate(players, start=1):
        await player.edit(nick=str(i))

    # Раздаем роли
    assigned_roles = random.sample(roles, len(players))  # Перемешиваем роли
    for player, role in zip(players, assigned_roles):
        await assign_role(ctx, player, role)
        if player.id not in role_dict:
            role_dict[player.id] = role

    # Отправляем роли ведущему
    roles_info = "\n".join([f'Игрок {i + 1}: {role_dict[player.id]}' for i, player in enumerate(players)])
    await member.send(f'Роли игроков:\n{roles_info}')

async def assign_role(ctx, player, role):
    # Отправляем сообщение о роли в ЛС игроку
    await player.send(f'Ваша роль: {role}')

# Обработчик ошибок для команды выбора ведущего
@выбрать_ведущего.error
async def choose_host_error(ctx, error):
    if isinstance(error, commands.MissingPermissions):
        await ctx.send("У вас нет прав для использования этой команды.")

TOKEN = 'ВАШ_ТОКЕН_ЗДЕСЬ'
bot.run(TOKEN)
В этом коде:
  1. Бот реагирует на команду !выбрать_ведущего, после чего меняет никнейм выбранного участника на !Ведущий.
  2. Ведущий выбирается из общего чата, и бот собирает всех участников из голосового канала, в котором находится ведущий.
  3. Никнеймы игрокам меняются на последовательные номера (1, 2, 3 и так далее).
  4. Каждому игроку случайным образом присваивается одна из ролей: "мафия", "доктор", "шериф", "путана", "мирный житель". Игроку отправляется ЛС с информацией о его роли.
  5. Ведущему отправляется полное сообщение со списком ролей всех игроков.

библиотеку дискорда установил, токен в код вписал, разрешения на сайте (
Пожалуйста, авторизуйтесь для просмотра ссылки.
) выдал все (поставил галочку на чекбоксе "bot" и права админа)
бота самого запустил через консоль у себя на пк. В дискорде отображается он как "в сети"
Теперь сама проблема: прописываю команду !выбрать_ведущего и пингую себя в одном сообщении, находясь при этом в единственном голосовом канале на сервере с еще 2-мя пользователями и от бота 0 реакции, даже не пишет что что-то не так.

Помогите пожалуйста, буду очень благодарен, отвечу на все вопросы на которые смогу ответить:FeelsBadMan:


я попросил ИИ переписать код и теперь бот пишет вот такое сообщ:
Произошла ошибка: Command raised an exception: Forbidden: 403 Forbidden (error code: 50013): Missing PermissionsDiscord_fJQeSUdRpF.png
Ошибка как я понял с правами доступа, но все права в самом дискорде выданы, может проблема с сайтом где ссылку на приглашение бота настраивать?

проблему ошибки понял, бот может менять ник всем кроме создателя сервера. Вопрос: как сделать так чтобы он мог это делать?
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
21 Ноя 2024
Сообщения
71
Реакции[?]
0
Поинты[?]
0
Как минимум одна из проблем - код от нейронки. Постарайся выучить яп и делать сам, а не делать весь код через нейронку. У нейронок сейчас по крайней мере много ошибок и калл-кода.
 
Сверху Снизу