аоууеоооы
-
Автор темы
- #1
Ещё раз всем хай, это первый (ну получается второй) гайд в данном курсе:
#0 | Подготовка (установка python/disnake, создание бота) (ссылка)
#1 | Ивенты, команды | данный этап
#2 | Слэш-команды, обработка ошибок
#3 | Разделение кода (cogs)
#4 | Кнопки, выпадающие меню
#5 | Хостинг бота на сервере
Курс спонсирован напитком экстра-ситро
Просьба писать код вдумчиво, не просто копипастить.
Моя цель - чтобы те, кто ничего незнает, хоть чему-нибудь научились.
1. Начинаем писать бота
2. Ивенты
3. Команды
4. Запуск
На этом всё, делайте своих ботов.
Для связи: aristocratos#4840, только писать
Профессионалы могут указать на мои ошибки)
Спасибо, скоро увидимся
#0 | Подготовка (установка python/disnake, создание бота) (ссылка)
#1 | Ивенты, команды | данный этап
#2 | Слэш-команды, обработка ошибок
#3 | Разделение кода (cogs)
#4 | Кнопки, выпадающие меню
#5 | Хостинг бота на сервере
Курс спонсирован напитком экстра-ситро
Просьба писать код вдумчиво, не просто копипастить.
Моя цель - чтобы те, кто ничего незнает, хоть чему-нибудь научились.
1. Начинаем писать бота
Создайте 2 файла:
bot.py - наш основной файл с ботом
config.py - файл с конфигурацией (токен, префикс и т.п.)
Для того чтобы начать писать команды или ивенты, надо написать базовый код:
>> bot.py:
1. Импортируем библиотеку disnake и commands
2. Сделаем переменную с нашим ботом:
Мы можем использовать disnake.Client:
Но я буду использовать commands.Bot
(он принимает такие же параметры, как Client):
Можно ещё импортировать из disnake Intents, чтобы получилось покрасивее
Делайте как хотите
Также если вы работаете в Visual Studio Code, PyCharm (и других), можно посмотреть
какие аргументы принимает та или иная функция - просто наведитесь на неё курсором
3. Вставляете ниже запуск нашего бота:
>> config.py:
Чтобы наш
1. Открываем config.py
2. Пишем в нём:
Далее вы можете добавлять свои переменные и вызывать их вот так:
3. В bot.py пишем рядом с нашими импортами:
Это позволит использовать переменные config в bot.py
После данного этапа у нас должно получится примерно так:
bot.py - наш основной файл с ботом
config.py - файл с конфигурацией (токен, префикс и т.п.)
Для того чтобы начать писать команды или ивенты, надо написать базовый код:
>> bot.py:
1. Импортируем библиотеку disnake и commands
import disnake
from disnake.ext import commands
2. Сделаем переменную с нашим ботом:
Мы можем использовать disnake.Client:
bot = disnake.Client(intents=disnake.Intents.all())
Но я буду использовать commands.Bot
(он принимает такие же параметры, как Client):
bot = commands.Bot(intents=disnake.Intents.all(), command_prefix=config["prefix"])
Можно ещё импортировать из disnake Intents, чтобы получилось покрасивее
Python:
from disnake import Intents # импортируем Intents
bot = commands.Bot(intents=Intents.all(), command_prefix=config["prefix"]) # вместо disnake.Intents.all() - Intents.all()
Также если вы работаете в Visual Studio Code, PyCharm (и других), можно посмотреть
какие аргументы принимает та или иная функция - просто наведитесь на неё курсором
3. Вставляете ниже запуск нашего бота:
bot.run(config["token"])
>> config.py:
Чтобы наш
config["token"]
выдавал наш токен и config["prefix"]
выдавал наш префикс нам нужно создать конфиг:1. Открываем config.py
2. Пишем в нём:
config.py:
config = {
'token': 'TOKEN', # токен из #0 гайда
'prefix': '!' # наш префикс
}
config["prefix"]
3. В bot.py пишем рядом с нашими импортами:
from config import config
Это позволит использовать переменные config в bot.py
После данного этапа у нас должно получится примерно так:
2. Ивенты
Если вы хотите автоматически отслеживать те или иные действия на вашем сервере (кто на него зашёл, кого забанили, кто зашёл в определенный войс), то нам нужны ивенты.
Их существует множество, все они есть в документации -
Мы разберём три ивента - on_ready, on_member_ban, on_member_join:
1. on_ready:
2. on_member_ban:
3. on_member_join:
Для получения ID нужно включить в настройках: Настройки -> Расширенные -> Режим разработчика, потом ЛКМ по каналу -> Копировать ID канала
Их существует множество, все они есть в документации -
Пожалуйста, авторизуйтесь для просмотра ссылки.
Мы разберём три ивента - on_ready, on_member_ban, on_member_join:
1. on_ready:
Данный ивент вызывается когда бот полностью запускается, мы будем использовать его чтобы поставить какой-нибудь смешной статус и вывести сообщение в консоль:
Запускаем нашего бота и получается примерно так:
Вы можете менять статус и активность, все доступные статусы и активности есть тут -
Вот код который ставит "Не беспокоить" и Слушает пользователей:
Также можно подключить там какую-нибудь ДБ, чтобы потом с ней взаимодействовать (для примера).
Python:
@bot.event
async def on_ready():
await bot.change_presence(status=disnake.Status.online, activity=disnake.Game("ебашит гайды"))
print(f"{bot.user.name} logged in.")
Вы можете менять статус и активность, все доступные статусы и активности есть тут -
Пожалуйста, авторизуйтесь для просмотра ссылки.
,
Пожалуйста, авторизуйтесь для просмотра ссылки.
Вот код который ставит "Не беспокоить" и Слушает пользователей:
await bot.change_presence(status=disnake.Status.do_not_disturb, activity=disnake.Activity(type=disnake.ActivityType.listening, name="пользователей")
Пожалуйста, авторизуйтесь для просмотра ссылки.
Также можно подключить там какую-нибудь ДБ, чтобы потом с ней взаимодействовать (для примера).
Данный ивент вызывается когда пользователя банят (не выгоняют), мы будем использовать его чтобы написать в определенный канал, что пользователь забанен.
Он отправляет объект сервера и пользователя - guild и user, guild - сервер в котором пользователя забанили и user - пользователь которого забанили.
Мы будем использовать только user.
Для нахождения канала по ID используем метод get_channel(id)
Можно также вывести в виде embed:
Можно кастомизировать по своему
Сообщение при бане -
Он отправляет объект сервера и пользователя - guild и user, guild - сервер в котором пользователя забанили и user - пользователь которого забанили.
Мы будем использовать только user.
Для нахождения канала по ID используем метод get_channel(id)
Python:
@bot.event
async def on_member_ban(guild:disnake.Guild, user: disnake.Member):
channel = await bot.get_channel(1107292203912544338) # получение канала #баны
await channel.send(f"Пользователь {user.name}#{user.discriminator} был забанен.") # вывод сообщения о бане
Python:
@bot.event
async def on_member_ban(guild:disnake.Guild, user: disnake.Member):
channel = await bot.get_channel(1107292203912544338) # получение канала #баны
emb = disnake.Embed(title="Ещё один бан", description=f"Пользователь {user.name}#{user.discriminator} был забанен") #создание embed
await channel.send(embed=emb) # вывод embed'a в чат
Сообщение при бане -
Пожалуйста, авторизуйтесь для просмотра ссылки.
Данный ивент вызывается, когда пользователь заходит на наш сервер, мы будем использовать его чтобы написать в определенный канал, что пользователь присоединился к нам.
Он отправляет объект пользователя - user.
Для нахождения канала по ID используем метод get_channel(id)
Можно вывести в embed, как в on_member_ban и сделать также с методом on_member_remove - это когда пользователь выходит с нашего сервера.
Сообщение при подключении пользователя -
Он отправляет объект пользователя - user.
Для нахождения канала по ID используем метод get_channel(id)
Python:
@bot.event
async def on_member_join(user: disnake.Member):
channel = await bot.get_channel(1107267042865848351) # получение канала #приглашения
await channel.send(f"{user.mention} присоединился к нам!") # отправка сообщения
Сообщение при подключении пользователя -
Пожалуйста, авторизуйтесь для просмотра ссылки.
3. Команды
Мы будем рассматривать слеш-команды в следующем гайде, а пока сделаем команды как в старые добрые, с помощью префикса
Мы сделаем команду say(пишет ваш текст, который вы написали в аргументах), ban и kick
1. say
2. ban и kick
Мы сделаем команду say(пишет ваш текст, который вы написали в аргументах), ban и kick
1. say
Данная команда напишет ваш текст, например, у вас есть канал в котором вы хотите писать от имени бота.
Вывод:
Python:
@bot.command()
async def say(ctx: disnake.Message, *, text): # получение текста, который вы напишите
await ctx.message.delete() # удаление сообщения
await ctx.send(text) # отправка сообщения
Пожалуйста, авторизуйтесь для просмотра ссылки.
Данная команда забанит/кикнет пользователя, которого вы упомяните:
Для работы
Python:
@bot.command()
async def kick(ctx: disnake.Message, member: disnake.Member):
await ctx.message.delete() # удаление сообщения
await member.kick()# кик пользователя
ms = await ctx.send(f"{member.display_name} был кикнут с сервера.") # отправка сообщения
await asyncio.sleep(3) # ожидание 3 секунды
await ms.delete() # удаление сообщения
@bot.command()
async def ban(ctx: disnake.Message, member: disnake.Member):
await ctx.message.delete() # удаление сообщения
await member.ban() # бан пользователя
ms = await ctx.send(f"{member.display_name} был забанен на сервере.")# отправка сообщения
await asyncio.sleep(3) # ожидание 3 секунды
await ms.delete() # удаление сообщения
asyncio.sleep(3)
импортируйте asyncio -> import asyncio
или добавьте к disnake import disnake, asyncio
Можно запустить из visual studio code, если вы там пишите бота,
Или сделать start.bat в папке с bot.py cо следующим кодом:
и открыть его.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Или сделать start.bat в папке с bot.py cо следующим кодом:
Код:
@echo off
python bot.py
pause>nul
Для связи: aristocratos#4840, только писать
Профессионалы могут указать на мои ошибки)
Спасибо, скоро увидимся
Последнее редактирование: