Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
1) Изначальная подготовка (Обязательная часть) 1.1)Скачиваем Python *тык* (При установке обязательно добавляем в PATH)
1.2)Открываем консоль (cmd) и прописываем в неё: "pip install discord.py"
2) Написание бота
2.1) В любом удобном для нас месте создаём папку (для удобства можно назвать её именем бота)
2.2) В этой папке создаём файлы "bot.py" и "config.py"
2.3) С помощью текстового редактора открываем config.py и пишем в него настройки нашего бота:
2.4) С помощью текстового редактора открываем bot.py и пишем импорты
2.5) После импортов пишем следующее :
2.5) После client.remove_command('help') # Удаляем изначальную команду "help" пишем:
2.6) Давайте добавим новую команду с выводом результата через обычное сообщение:
2.7) Давайте добавим новую команду с выводом результата через embed:
2.8) Добавление аргументов асинхронной функции и реакции на сообщение:
2.9) Проанализировав текст написанный выше, вы теперь знаете, как пишутся простейшие команды на discord.py. Для улучшения своих знаний советую почитать официальную документацию discord.py или посмотреть какие-либо видеоролики на эту тематику
VT 1
VT 2
Download 1
Download 2
1.2)Открываем консоль (cmd) и прописываем в неё: "pip install discord.py"
2) Написание бота
2.1) В любом удобном для нас месте создаём папку (для удобства можно назвать её именем бота)
2.2) В этой папке создаём файлы "bot.py" и "config.py"
2.3) С помощью текстового редактора открываем config.py и пишем в него настройки нашего бота:
Python:
settings = {
'TOKEN': 'BOT TOKEN', # Получение токена - https://prnt.sc/uofhur
'NAME BOT': 'BOT NAME', # Имя вашего бота
'ID': 'BOT ID', # Получение ID - https://prnt.sc/uofik2
'PREFIX': '$', # Префикс
'OWNER':'BOT OWNER', # ИЗМЕНЯЙТЕ НА СВОЙ NICK:ID (Пример: Toil#5605)
'OWNER NAME':'OWNER NAME' # ИМЯ ВЛАДЕЛЬЦА (Пример: Toil)
}
Python:
import discord # Импорт библиотеки discord.py
from discord.ext import commands # Импорт из библиотеки discord.py библиотеки commands
from config import settings # Импорт из файла config.py словаря конфигураций
Python:
prefix = settings['PREFIX'] # Получение переменной "prefix" из нашего config.py
client = commands.Bot(command_prefix = settings['PREFIX']) # Создаем переменную client используемую для всех наших взаимодействий с ботом
client.remove_command('help') # Удаляем изначальную команду "help"
client.run (settings['TOKEN']) #Убираем в самый конец файла и больше не трогаем (нужен для запуска бота)
Python:
@client.event # Объявление события
async def on_ready(): # Объявление асинхронной функции
print (f"Logged on as {settings['NAME BOT']}") # Сообщение в консоль при готовности бота (https://prnt.sc/uog9bz)
await client.change_presence(status=discord.Status.online, activity=discord.Streaming(name=f'{prefix}help', url='https://www.twitch.tv/unknowpage')) # Статус бота (Для примера выбрал стриминг)
# Cообщение/команда которая отображается в статусе у бота (https://prnt.sc/uog6r6), меняется с помощью: name=f'{prefix}help' (Пример: name=f'Hello world!') (https://prnt.sc/uog9hx)
Python:
# Пример команды с выводом результата через обычное сообщение:
# Ping
@client.command(aliases = ['Ping', 'PING', 'pING', 'ping', 'Пинг', 'ПИНГ', 'пИНГ', 'пинг', 'Понг', 'ПОНГ', 'пОНГ', 'понг'])
#@client.command - объявление команды | (aliases = ['Ping', 'PING' ...]) - Альтернативное название команды
async def __ping(ctx): # Объявление асинхронной функции __ping с возможностью публикации сообщения
ping = client.ws.latency # Получаем пинг клиента
ping_emoji = '?????' # Эмоция пинга, если он меньше 100ms
if ping > 0.10000000000000000:
ping_emoji = '?????' # Эмоция пинга, если он больше 100ms
if ping > 0.15000000000000000:
ping_emoji = '?????' # Эмоция пинга, если он больше 150ms
if ping > 0.20000000000000000:
ping_emoji = '?????' # Эмоция пинга, если он больше 200ms
if ping > 0.25000000000000000:
ping_emoji = '?????' # Эмоция пинга, если он больше 250ms
if ping > 0.30000000000000000:
ping_emoji = '?????' # Эмоция пинга, если он больше 300ms
if ping > 0.35000000000000000:
ping_emoji = '?????' # Эмоция пинга, если он больше 350ms
message = await ctx.send('Пожалуйста, подождите. . .') # Переменная message с первоначальным сообщением
await message.edit(content = f'Понг! {ping_emoji} `{ping * 1000:.0f}ms` :ping_pong:') # Редактирование первого сообщения на итоговое (на сам пинг)
print(f'[Logs:utils] Пинг сервера был выведен | {prefix}ping') # Информация в консоль, что команда "ping" была использована
print(f'[Logs:utils] На данный момент пинг == {ping * 1000:.0f}ms | {prefix}ping') # Вывод пинга в консоль
#Итог: https://prnt.sc/uogljj
Python:
# Пример команды с выводом результата через embed:
# Help
@client.command(aliases = ['Help', 'help', 'HELP', 'hELP', 'хелп', 'Хелп', 'ХЕЛП', 'хЕЛП'])
async def __help (ctx):
emb = discord.Embed( title = 'ДОСТУПНЫЕ КОМАНДЫ:', description = 'ВНИМАНИЕ! Бот ещё в разработке!', colour = discord.Color.red() )
# title - Жирный крупный текст (Заголовок) | description - Текст под заголовком | colour - Цвет полоски
emb.set_author(name = ctx.author.name, icon_url = ctx.author.avatar_url)
# Отображает: ctx.author.name - Имя отправителя, ctx.author.avatar_url - Аватар отправителя
emb.add_field( name = 'Информация', value = f'`{prefix}хелп` `{prefix}инфо` `{prefix}сервер` `{prefix}профиль` `{prefix}авторы` ', inline=False)
emb.add_field( name = 'Модерирование', value = f'`{prefix}мут` `{prefix}размут` `{prefix}бан` `{prefix}кик` `{prefix}очистить` ', inline=False)
# Отображаемый блок текста. name - Жирный крупный текст | value - обычный текст под "name" | inline = True - Блоки текста будут в одну строку (https://prnt.sc/uogw2x) / inline = False - Блоки текста будут один под другим (https://prnt.sc/uogx3t)
emb.set_thumbnail(url = client.user.avatar_url)
# emb.set_thumbnail - Добавляет картинку около текста (Например: emb.set_thumbnail(url = "https://icons.iconarchive.com/icons/elegantthemes/beautiful-flat-one-color/128/unlocked-icon.png") (NOAD) добавит картинку замка (https://prnt.sc/uogztb) | client.user.avatar_url - Отображает аватарку бота
emb.set_footer( icon_url = ctx.guild.owner.avatar_url, text = f'{ctx.guild.owner.name} © Copyright 2020 | Все права защищены' )
# emb.set_thumbnail - Добавляет картинку под текстом | ctx.guild.owner.avatar_url - Аватарка создателя сервера | ctx.guild.owner.name - Имя создателя сервера
await ctx.send ( embed = emb)
# Отправляет сообщение и так же преобразует emb в embed
print(f'[Logs:info] Справка по командам была успешно выведена | {prefix}help ')
# Информация в консоль, что команда "help" была использована
# Итог: https://prnt.sc/uoh6v6
Python:
# Добавление аргументов асинхронной функции, реакции на сообщение:
#Kick
@client.command(aliases = ['кик', 'Кик', 'кИК', 'КИК', 'Kick', 'kICK', 'KICK', 'kick'])
@commands.has_permissions ( administrator = True ) # Команда только для пользователей имеющих роль с правами "Администратор"
async def __kick(ctx, member: discord.Member, *, reason = None): # Асинхронная функция __kick(ctx, member: discord.Member, *, reason = None)
#Аргументы: ctx - отправка сообщения с помощью команды (Обязательно)
#Аргументы: member: discord.Member - "member" ----- можно изменить, но не забывайте изменять аргумент в самой командеr (Discord.Member - для получения id указанного пользователя)
#Аргументы: * - предшествующий аргумент необходим
#Аргументы: reason = None - "reason" ----- можно изменить, но не забывайте изменять аргумент в самой команде, "None" - значение по умолчанию
await ctx.message.add_reaction('✅') # Добавляет реакцию к сообщению с командой
await member.kick( reason = reason ) # Кикнуть пользователя по причине (Преобразует причину бота в причину дискорда)
emb = discord.Embed( title = 'kick', description = f'Пользователь {member} был кикнут по причине { reason } ', colour = discord.Color.red() )
emb.set_author( name = client.user.name )
emb.set_footer( text = ctx.author.name, icon_url = ctx.author.avatar_url )
emb.set_thumbnail(url = client.user.avatar_url)
await ctx.send( embed = emb )
print(f'[Logs:moderation] Пользователь {member} был кикнут по причине {reason} | {prefix}kick ')
# Итог: https://prnt.sc/uohdqh и https://prnt.sc/uohf5a
@__kick.error # Объявление ошибки в команде
async def kick_error(ctx, error): # ctx - обязательно! error - можно изменить, но не забывайте изменять аргумент в самой команде
if isinstance ( error, commands.MissingRequiredArgument): # Недостаточно аргументов
emb = discord.Embed( title = f'**Команда "{prefix}кик"**', description = f'Изгоняет указаного участника с сервера с возможностью возвращения ', colour = discord.Color.red() )
emb.set_author(name = ctx.author.name, icon_url = ctx.author.avatar_url)
emb.add_field( name = 'Использование', value = "!кик <@Участник | ID>", inline=False)
emb.add_field( name = 'Пример', value = "`!кик @Участник`\n┗ Кикнет указаного участника.", inline=False)
emb.set_thumbnail(url = client.user.avatar_url)
emb.set_footer( icon_url = ctx.guild.owner.avatar_url, text = f"{settings['CREATOR NAME']} © Copyright 2020 | Все права защищены" )
await ctx.send ( embed = emb)
print(f"[Logs:error] Необходимо указать участника | {prefix}kick")
#Итог: https://prnt.sc/uohttb
if isinstance (error, commands.MissingPermissions):# Недостаточно прав
emb = discord.Embed( title = f'**Команда "{prefix}кик"**', description = f'Изгоняет указаного участника с сервера с возможностью возвращения ', colour = discord.Color.red() )
emb.set_author(name = ctx.author.name, icon_url = ctx.author.avatar_url)
emb.add_field( name = 'ОШИБКА!', value = "У вас недостаточно прав!", inline=False)
emb.set_thumbnail(url = client.user.avatar_url)
emb.set_footer( icon_url = ctx.guild.owner.avatar_url, text = f"{settings['CREATOR NAME']} © Copyright 2020 | Все права защищены" )
await ctx.send ( embed = emb)
print(f"[Logs:Error] [Ошибка доступа] Пользователь [{ctx.author}] попытался кикнуть | {prefix}kick")
#Итог: https://prnt.sc/uohueb
VT 1
VT 2
Download 1
Download 2