Как сделать статус боту в дискорде python
Перейти к содержимому

Как сделать статус боту в дискорде python

  • автор:

Создание discord-ботов на Python

В этой статье мы создаем своего дискорд-бота на боксе с нуля.

Подготовка

Предварительные действия на боксе такие же, как и в нашей статье про Telegram:

  • выбираем бокс
  • создаем пользователя
  • настраиваем окружение

Регистрация бота

Создание бота происходит в два этапа на сайте мессенджера. Сначала создаем приложение: «Разработчикам»(в футере) → «Applications», нажимаем кнопку «New Application» в правой верхней части страницы:

Выбираем имя приложения (выбирайте мудро, хоть его и можно изменить позже):

Готово. Здесь можно переименовать приложение, дать описание, загрузить аватарку:

Теперь добавим к нему бота. В меню слева вкладка «Bot» → «Add Bot» → «Yes, do it!».

Токен бота можно получить по кнопке Copy:

Если вдруг токен попал не только в ваши руки, его всегда можно заменить кнопкой Regenerate.

Добавление бота на сервер

Переходим на вкладку «OAuth2» и создаем для него свой URL для приглашения:

Чуть ниже выбираем права для бота. Если это бот для администрирования сервера, то можно, конечно, выбрать «Administrator», но нужно быть осторожными с этим.

Выдаем права, действительно нужные боту для администрирования сервера:

Теперь бота можно добавить на сервер. Копируем ссылку и открываем её в браузере. В диалоговом окне выбираем сервер:

Проверяем его привилегии:

Всё, бот на сервере:

Код бота

Активируем виртуальное окружение и ставим нужную библиотеку:

bot@box-48639:~$ source python/bin/activate (python) bot@box-48639:~$ pip install discord

Добавляем директорию для бота, не выходя виртуального окружения:

(python) bot@box-48639:~$ mkdir discobot

Создаем конфиг бота:

(python) bot@box-48639:~$ vim discobot/config.py

Наполняем его содержимым

settings =

  • token — токен бота
  • bot — имя бота
  • id — application ID: он находится под описанием приложения, в разделе «General Information»
  • prefix — если сообщение на сервере начинается с этого символа, бот воспримет его как свою команду.

Дальше код бота. Создаем bot.py и сразу редактируем его vim’ом:

(python) bot@box-48639:~$ vim discobot/bot.py

Первыми строками активируем виртуальное окружение и импортируем нужные модули:

import os, sys activate_this = '/home/bot/python/bin/activate_this.py' with open(activate_this) as f: exec(f.read(), ) import discord from discord.ext import commands from config import settings

Обозначаем боту, с какого символа начинаются его команды:

bot = commands.Bot(command_prefix = settings['prefix'])

И создаем первую команду — бот будет отправлять реплай с текстом “I’M ALIVE!” на сообщение “!status”:

@bot.command() async def status(ctx): await ctx.reply('I\’M ALIVE!')

Добавляем в код функцию запуска:

bot.run(settings['token'])

Закрываем редактор и запускаем бота:

(python) bot@box-48639:~$ python discobot/bot.py

Отправим сообщение в Discord:

Код бота целиком:

import os, sys activate_this = '/home/bot/python/bin/activate_this.py' with open(activate_this) as f: exec(f.read(), ) import discord from discord.ext import commands from config import settings bot = commands.Bot(command_prefix = settings['prefix']) @bot.command() async def status(ctx): author = ctx.message.author await ctx.reply('I\'M ALIVE!') bot.run(settings['token'])

Запуск бота

Создаем Linux-демона — он будет следить, что бот работает. Открываем файл (mlg, если нужно, меняем на своё имя сервиса):

root@box-48639:~# vim /etc/systemd/system/mlg.service

Добавляем в него строки:

[Unit] Description=Noscope Bot After=syslog.target After=network.target [Service] Type=simple User=bot WorkingDirectory=/home/bot/discobot ExecStart=/usr/bin/python3 /home/bot/discobot/bot.py Restart=always [Install] WantedBy=multi-user.target

И запускаем демона:

root@box-48639:~# systemctl daemon-reload root@box-48639:~# systemctl enable mlg root@box-48639:~# systemctl start mlg

Проверить, что всё работает, можно так:

root@box-48639:~# systemctl status mlg
● mlg.service - Noscope Bot Loaded: loaded (/etc/systemd/system/mlg.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2021-05-05 16:34:46 MSK; 7s ago Main PID: 307021 (python3) Tasks: 3 (limit: 2344) Memory: 21.4M CGroup: /system.slice/mlg.service └─307021 /usr/bin/python3 /home/bot/discobot/bot.py

Дополнение кода бота

Бот улучшается в два этапа:

  • добавляем код в файл бота
  • перезапускаем бота

Для примера добавим в бота какое-нибудь рандомное API. Открываем файл бота:

bot@box-48639:~$ vim ~/discobot/bot.py

И добавляем в него пару библиотек и ещё одну функцию обработки команд:

import json import requests @bot.command() async def meme(ctx): response = requests.get('https://some-random-api.ml/meme') json_data = response.json() embed = discord.Embed(title = json_data['caption']) embed.set_image(url = json_data ['image']) await ctx.send(embed = embed)

Закрываем файл и перезапускаем демона, чтобы изменения вступили в силу:

root@box-48639:~# systemctl restart mlg

Результатом будет рандомный мем:

Готово! Боты в Discord умеют многое, и мы можем и дальше расширять его возможности, изучая документацию.

Полезные ссылки

  • Официальная документация Discord
  • Документация discord.py
  • GitHub разработчиков модуля

Статусы в discord-py

Как зделать кастомный статус в discord-py? В документации я нашел атрибут CustomActivity для активности, и поидеи он должен работать как кастомный статус, но так и не работает,вот код:

await bot.change_presence(status=discord.Status.online, activity=discord.CustomActivity(sttstxtf)) 

Если вместо CustomActivity подставить Game то все работает А ещё хотелось бы узнать как сделать: бот слушает, и бот смотрит

Отслеживать
задан 6 июн 2022 в 16:52
user451780 user451780

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

 await bot.change_presence(status = discord.Status.online, activity = discord.Activity(name = f'текст', type = discord.ActivityType.playing)) #Идёт инфа о команде помощи await asyncio.sleep(99) await bot.change_presence(status = discord.Status.idle, activity = discord.Activity(name = f'за серверами', type = discord.ActivityType.watching)) #Инфа о количестве серверов, на котором находится бот. await asyncio.sleep(99) members = 0 for guild in bot.guilds: for member in guild.members: members += 1 await bot.change_presence(status = discord.Status.idle, activity = discord.Activity(name = f'за участниками', type = discord.ActivityType.watching)) #Общее количество участников, за которыми следит бот (Находятся на серверах) await asyncio.sleep(99) 

Статус: (online — онлайн) (idle — отошёл) (dnd — не беспокоить)

Гайд Создание бота для дискорда

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 и пишем в него настройки нашего бота:

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) >

2.4 ) С помощью текстового редактора открываем bot.py и пишем импорты

import discord # Импорт библиотеки discord.py from discord.ext import commands # Импорт из библиотеки discord.py библиотеки commands from config import settings # Импорт из файла config.py словаря конфигураций

2.5 ) После импортов пишем следующее :

prefix = settings['PREFIX'] # Получение переменной "prefix" из нашего config.py client = commands.Bot(command_prefix = settings['PREFIX']) # Создаем переменную client используемую для всех наших взаимодействий с ботом client.remove_command('help') # Удаляем изначальную команду "help" client.run (settings['TOKEN']) #Убираем в самый конец файла и больше не трогаем (нужен для запуска бота)

2.5 ) После client.remove_command(‘help’) # Удаляем изначальную команду «help» пишем:

@client.event # Объявление события async def on_ready(): # Объявление асинхронной функции print (f"Logged on as ") # Сообщение в консоль при готовности бота (https://prnt.sc/uog9bz) await client.change_presence(status=discord.Status.online, activity=discord.Streaming(name=f'help', url='https://www.twitch.tv/unknowpage')) # Статус бота (Для примера выбрал стриминг) # Cообщение/команда которая отображается в статусе у бота (https://prnt.sc/uog6r6), меняется с помощью: name=f'help' (Пример: name=f'Hello world!') (https://prnt.sc/uog9hx)

2.6 ) Давайте добавим новую команду с выводом результата через обычное сообщение:

# Пример команды с выводом результата через обычное сообщение: # 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'Понг! `ms` :ping_pong:') # Редактирование первого сообщения на итоговое (на сам пинг) print(f'[Logs:utils] Пинг сервера был выведен | ping') # Информация в консоль, что команда "ping" была использована print(f'[Logs:utils] На данный момент пинг == ms | ping') # Вывод пинга в консоль #Итог: https://prnt.sc/uogljj

2.7 ) Давайте добавим новую команду с выводом результата через embed:

# Пример команды с выводом результата через 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'`хелп` `инфо` `сервер` `профиль` `авторы` ', inline=False) emb.add_field( name = 'Модерирование', value = f'`мут` `размут` `бан` `кик` `очистить` ', 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' © 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] Справка по командам была успешно выведена | help ') # Информация в консоль, что команда "help" была использована # Итог: https://prnt.sc/uoh6v6

2.8 ) Добавление аргументов асинхронной функции и реакции на сообщение:

# Добавление аргументов асинхронной функции, реакции на сообщение: #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'Пользователь был кикнут по причине < 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] Пользователь был кикнут по причине | 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'**Команда "кик"**', 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.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" © Copyright 2020 | Все права защищены" ) await ctx.send ( embed = emb) print(f"[Logs:error] Необходимо указать участника | kick") #Итог: https://prnt.sc/uohttb if isinstance (error, commands.MissingPermissions):# Недостаточно прав emb = discord.Embed( title = f'**Команда "кик"**', 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" © Copyright 2020 | Все права защищены" ) await ctx.send ( embed = emb) print(f"[Logs:Error] [Ошибка доступа] Пользователь [] попытался кикнуть | kick") #Итог: https://prnt.sc/uohueb

2.9 ) Проанализировав текст написанный выше, вы теперь знаете, как пишутся простейшие команды на discord.py. Для улучшения своих знаний советую почитать официальную документацию discord.py или посмотреть какие-либо видеоролики на эту тематику

begor

owned by nixer1337

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 и пишем в него настройки нашего бота:

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) >

2.4 ) С помощью текстового редактора открываем bot.py и пишем импорты

import discord # Импорт библиотеки discord.py from discord.ext import commands # Импорт из библиотеки discord.py библиотеки commands from config import settings # Импорт из файла config.py словаря конфигураций

2.5 ) После импортов пишем следующее :

prefix = settings['PREFIX'] # Получение переменной "prefix" из нашего config.py client = commands.Bot(command_prefix = settings['PREFIX']) # Создаем переменную client используемую для всех наших взаимодействий с ботом client.remove_command('help') # Удаляем изначальную команду "help" client.run (settings['TOKEN']) #Убираем в самый конец файла и больше не трогаем (нужен для запуска бота)

2.5 ) После client.remove_command(‘help’) # Удаляем изначальную команду «help» пишем:

@client.event # Объявление события async def on_ready(): # Объявление асинхронной функции print (f"Logged on as ") # Сообщение в консоль при готовности бота (https://prnt.sc/uog9bz) await client.change_presence(status=discord.Status.online, activity=discord.Streaming(name=f'help', url='https://www.twitch.tv/unknowpage')) # Статус бота (Для примера выбрал стриминг) # Cообщение/команда которая отображается в статусе у бота (https://prnt.sc/uog6r6), меняется с помощью: name=f'help' (Пример: name=f'Hello world!') (https://prnt.sc/uog9hx)

2.6 ) Давайте добавим новую команду с выводом результата через обычное сообщение:

# Пример команды с выводом результата через обычное сообщение: # 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'Понг! `ms` :ping_pong:') # Редактирование первого сообщения на итоговое (на сам пинг) print(f'[Logs:utils] Пинг сервера был выведен | ping') # Информация в консоль, что команда "ping" была использована print(f'[Logs:utils] На данный момент пинг == ms | ping') # Вывод пинга в консоль #Итог: https://prnt.sc/uogljj

2.7 ) Давайте добавим новую команду с выводом результата через embed:

# Пример команды с выводом результата через 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'`хелп` `инфо` `сервер` `профиль` `авторы` ', inline=False) emb.add_field( name = 'Модерирование', value = f'`мут` `размут` `бан` `кик` `очистить` ', 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' © 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] Справка по командам была успешно выведена | help ') # Информация в консоль, что команда "help" была использована # Итог: https://prnt.sc/uoh6v6

2.8 ) Добавление аргументов асинхронной функции и реакции на сообщение:

# Добавление аргументов асинхронной функции, реакции на сообщение: #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'Пользователь был кикнут по причине < 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] Пользователь был кикнут по причине | 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'**Команда "кик"**', 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.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" © Copyright 2020 | Все права защищены" ) await ctx.send ( embed = emb) print(f"[Logs:error] Необходимо указать участника | kick") #Итог: https://prnt.sc/uohttb if isinstance (error, commands.MissingPermissions):# Недостаточно прав emb = discord.Embed( title = f'**Команда "кик"**', 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" © Copyright 2020 | Все права защищены" ) await ctx.send ( embed = emb) print(f"[Logs:Error] [Ошибка доступа] Пользователь [] попытался кикнуть | kick") #Итог: https://prnt.sc/uohueb

2.9 ) Проанализировав текст написанный выше, вы теперь знаете, как пишутся простейшие команды на discord.py. Для улучшения своих знаний советую почитать официальную документацию discord.py или посмотреть какие-либо видеоролики на эту тематику

Статус бота discord.py?

Makaroshka007

Тоже пытался и делал активности, никак не мог понять. Помог друг, он очень много копался в Discord.py. Показываю:

from asyncio import sleep #не забываем @bot.event async def on_ready(): guilds = len(bot.guilds) info = "!" print("[<>] Бот готов к работе.".format(info)) #в командную строку идёт инфа о запуске while True: await bot.change_presence(status = discord.Status.dnd, activity = discord.Activity(name = f'r!help', type = discord.ActivityType.playing)) #Идёт инфа о команде помощи (префикс изменить) await asyncio.sleep(15) await bot.change_presence(status = discord.Status.dnd, activity = discord.Activity(name = f'за серверами', type = discord.ActivityType.watching)) #Инфа о количестве серверов, на котором находится бот. await asyncio.sleep(15) members = 0 for guild in bot.guilds: for member in guild.members: members += 1 await bot.change_presence(status = discord.Status.idle, activity = discord.Activity(name = f'за участниками', type = discord.ActivityType.watching)) #Общее количество участников, за которыми следит бот (Находятся на серверах) await asyncio.sleep(15)

Пытался делать и с помощью советов людей из других ответов — бот не запускался вообще. Надеюсь помог)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *