Привет!
Многие хотят создать своего бота для Discord-a, но не знают как, и в этой статье я расскажу как это сделать - каждый найдет что-то для себя!
Этап 1. Создание аккаунта бота.
Переходим по ссылке - https://discord.com/developers/applications , если необходимо - авторизируемся.
Тыкаем на кнопку "New Application" возле вашей аватарки:
Вводим любое имя, оно будет служить названием бота и нажимаем Create
Нас закидывает сюда:
Слева нажимаем "Bot" и видим примерно это:
Нажимаем "Add Bot" и в открывшемся окне "Yes, do it!"
Ставим аватарку боту, если хочется, и над надписью Token нажимаем кнопку "Copy"
Этап 2. Подготовка к написанию кода.
Заходим на https://code.visualstudio.com/ (если умеете, можете качать другое, но я юзаю это), если браузер заблокирует то нажмите "Дополнительно" и там - "Всё равно перейти на небезопасный сайт"
Нажимаем кнопку Скачать (Download) сверху
Нас закидывает на другую страницу, и там вы скачиваете exe-шник для установки. Как устанавливать программу я думаю обьяснять не надо.
Заходим сюда - https://www.python.org/downloads/release/python-388/ и листаем вниз. Там скачиваем установщик для 32битной системы или для 64битной. (Почему 3.8 версия python а не новая? Потому-что новые не поддерживают 7 винду, а у многих она стоит до сих пор)
Запускаем и ставим галочку на "Add python to path":
Нажимаем Customize installation -> next и делаем все как на скрине и обязательно меняем место установки (прямо в C:\python):
Теперь запускаем Visual Studio Code и жмем Install Python:
Теперь создаем файл main.py на раб. столе (кто не знает как менять разрешения у файлов, смотрите в интернете) и перетаскиваем его в Visual Studio :
Чуть не забыл: открываем раздел "Terminal", справа выбираем "powershell" и пишем - pip install discord.py и нажимаем enter:
После установки discord.py пишем в этот же терминал: pip install discord и устанавливаем. После всех установок перезапустите Visual Studio - иначе будут ошибки.
Этап 3. Пишем код для бота.
Итак, пишем в код это:
import discord
import time
from discord.ext import commands
from discord.utils import get
TOKEN = 'сюда вставь токен своего бота, который копировал на 1 этапе'
bot = commands.Bot(command_prefix='!')
bot.remove_command('help')
Это "основа" бота , вообщем - без неё у вас ничего не выйдет.
Давайте добавим бота на сервер, а там уже будем тестировать команды.
Заходим на https://discord.com/developers/applications , выбираем вашего бота, слева нажимаем "Oauth2", листаем вниз, ставим галочки - "Bot" и "Administrator":
После того как поставили галочки, нажимаем на copy рядом с ссылкой, и переходим по этой ссылке и добавляем бота.
Теперь пишем команды для бота. Давайте напишем простую команду которая отправит сообщение пользователя от лица бота:
@bot.command()
async def saybot(ctx, *, message):
await ctx.message.delete()
await ctx.send(ctx.author.mention + " сказал - " + message)
Поясняю:
@bot.command() - говорит боту о том, что это его команда.
async def saybot(ctx, *, message) - указывает название команды
await ctx.message.delete() - удаляет сообщение пользователя о вызове команды
await ctx.send(ctx.author.mention + " сказал - " + message) - бот отправляет сообщение о том , что сказал пользователь:
В конец кода добавляем:
bot.run(TOKEN)
Это надо чтобы бот запустился
Теперь заходим в Visual Studio и запускаем бота:
Пишем на сервере куда добавили бота:
!saybot hello
Ого! Бот удалил наше сообщение и нам выдано ответ:
А если хотим чтобы бот не писал что это вы "сказали" то пишем новую команду ( bot.run(TOKEN) всегда ниже всех команд) :
@bot.command()
async def say(ctx, *, message):
await ctx.message.delete()
await ctx.send(message)
Это новая команда !say . Останавливаем бота - кликаем по терминалу и нажимаем ctrl + c в нем и заного запускаем, так делаем всегда после написания новой команды в код. Пишем команду !say Привет! и бот пишет ваше "Привет!"
Ладно. Допустим ты хочешь чтобы бот отправил несколько сообщений, да еще с задержкой, вот тебе команда:
@bot.command()
async def dialog(ctx):
await ctx.message.delete()
await ctx.send("Привет!")
time.sleep(4)
await ctx.send("Как дела?")
time.sleep(4)
await ctx.send("Отлично!")
Где time.sleep(4) - указывайте значение под себя (1 - 1 секунда, 5 - 5 секунд)
Вот так это выглядит (команда - !dialog):
Или же вы хотите сделать бан участника, смотрите код:
@bot.command()
@commands.has_guild_permissions(ban_members=True)
async def banuser(ctx, member:discord.User=None, reason =None):
if member == ctx.message.author:
await ctx.channel.send("Жаль, но ты не можешь забанить себя :(")
return
if reason == None:
reason = "Просто так :)"
message = f"Вы были забанены на сервере **{ctx.guild.name}** по следующей причине: \n{reason}"
await member.send(message)
await ctx.guild.ban(member, reason=reason)
await ctx.channel.send(f"**{member}** заблокирован!\nПричина: **{reason}**\nЗаблокировал: {ctx.author.mention}")
@banuser.error
async def banuser(ctx, error):
if isinstance(error, commands.errors.MissingPermissions):
await ctx.send(':x: У вас недостаточно прав!')
Если:
- пустота, команда написана так - !banuser : бот ничего не выдаст
- у человека нет роли, которая может банить:
- если человек пытается забанить самого себя:
- если все прошло успешно:
1) бот пишет на сервер:
2) бот пишет в личку тому, кого забанили:
- если человек пытается забанить участника, которого бот не может забанить (у бота недостаточно прав, или пытаюся банить какого нибудь бота, либо у человека выше роль чем у бота) - бот промолчит.
Весь код:
import discord
import time
from discord.ext import commands
from discord.utils import get
TOKEN = 'токен который получали на 1этапе'
bot = commands.Bot(command_prefix='!')
bot.remove_command('help')
@bot.command(pass_context=True)
async def saybot(ctx, *, message):
await ctx.message.delete()
await ctx.send(ctx.author.mention + " сказал - " + message)
@bot.command(pass_context=True)
async def say(ctx, *, message):
await ctx.message.delete()
await ctx.send(message)
@bot.command(pass_context=True)
async def dialog(ctx):
await ctx.message.delete()
await ctx.send("Привет!")
time.sleep(4)
await ctx.send("Как дела?")
time.sleep(5)
await ctx.send("Отлично!")
@bot.command()
@commands.has_guild_permissions(ban_members=True)
async def banuser(ctx, member:discord.User=None, reason =None):
if member == ctx.message.author:
await ctx.channel.send("Жаль, но ты не можешь забанить себя :(")
return
if reason == None:
reason = "Просто так :)"
message = f"Вы были забанены на сервере **{ctx.guild.name}** по следующей причине: \n{reason}"
await member.send(message)
await ctx.guild.ban(member, reason=reason)
await ctx.channel.send(f"**{member}** заблокирован!\nПричина: **{reason}**\nЗаблокировал: {ctx.author.mention}")
@banuser.error
async def banuser(ctx, error):
if isinstance(error, commands.errors.MissingPermissions):
await ctx.send(':x: У вас недостаточно прав!')
Ещё, когда-то я писал бота для "слежки", вот его код:
import discord
client = discord.Client()
@client.event
async def on_message(message):
print("Full info:\n")
print(message)
print("Author:\n")
print(message.author)
print('Message:\n')
print(message.content)
print('Server:\n')
print(message.guild)
print("Channel:\n")
print(message.channel)
client.run('токен вашего бота')
если добавить этого бота на сервер, то каждое сообщение с каждого сервера будет вам выписываться в консольку(если бот включен):
Если будете использовать этот скрипт, тогда все остальные команды не будут работать, если хотите все команды из данной статьи, то данный код помещайте в отдельный файл и запускайте его отдельно.
Слева сверху нажимаем file -> save , чтобы сохранился код :)
И так - нам наверное не хочется каждый раз запускать через Visual Studio нашего бота, хочется просто создать .exe файл который запускаешь - и бот включен. Для этого нужен компонент pyinstaller . Заходим в консольку с выбранным powershell справа и пишем:
pip install future
Нажимаем enter для установки
pip install wheel
Нажимаем enter для установки
pip install altgraph
Нажимаем enter для установки
pip install pyinstaller
Нажимаем enter для установки
Выходим из Visual Studio code заранее сохранив файл ( Слева сверху нажимаем file -> save ) и идем на рабочий стол или туда, куда вы сохранили файл бота. Нажимаем shift и с зажатым shift нажимаем правой кнопкой мыши по рабочему столу (или месту куда сохранили файл) --> открыть окно команд. В открывшейся командной строке пишем pyinstaller -F main.py
Если это бот для "слежки" - логи будут в этой консольке, если бот с командами - то в консольке будут только ошибки.
Заключение.
Бота сделать легко, самое главное - не ленится, если тебе нужна команда, например, что-бы бот зашел в голосовой канал - ищи в интернете :)
Так вот, если вы закроете это окошечко или у вас отключат интернет или вы отключите комп или ноут - бот отключится. Для того чтобы бот работал целыми днями напролет без отключений (24/7) нужен хостинг. Большинство хостингов платныe, но у меня есть быстрый бесплатный хостинг. Ставь лайк и подписывайся, и я обязательно выпущу статью как поставить бота на хостинг чтобы бот работал 24/7 - тоесть, круглосуточно.
Удачи, пока :)