Как сделать так, чтобы бот, при вводе какой-либо фразы после префикса (например, i!Как падают крокодилы?) бот отвечал на уровне человека, то есть добавить ИИ в бота. Но еще желательно, чтобы остальные команды (например, i!test) работали так, как я сделаю. Используется bot= discord.ext.commands.Bot(command_prefix = «i!»)
Отслеживать
задан 1 мая 2021 в 19:25
Денис Орлов Денис Орлов
52 12 12 бронзовых знаков
прежде чем добавить ии. откуда вы его возьмёте ?
1 мая 2021 в 20:04
Слышал, что есть модели поведения в Ask-sdk-model. Может быть оттуда взять?
1 мая 2021 в 20:22
Как сделать Так же, как вы делаете и остальные команды для бота.
2 мая 2021 в 10:05
Геннадий, таким образом можно сделать только определенные команды, например i!Привет. Но я же не могу предусмотреть остроумие какого-нибудь человека, который задастся вопросом, который я не предусмотрел, например i!Как можно сделать золото из ртути? Или что-то подобное.
2 мая 2021 в 15:48
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Я наверное не совсем понял вопроса, но вот что я понял: Вы хотите что бы бот отвечал на вопросы с префиксом, но вопросы будут разные, и вы не можете и вы не можете предугадать первое слово вопроса, то есть вопросы !кто убил Кенади и !сколько будет 3^^^3? будут иметь разные команды, в первом случае это кто , а во втором сколько . В это случае вы можете:
- Создать одну команду, например !вопрос , и использовать её так: !вопрос почему небо голубое
- Использовать метод on_message . Этот метод ловит каждое сообщение Вот что вам нужно использовать:
Отслеживать
ответ дан 10 мая 2021 в 11:33
191 13 13 бронзовых знаков
Highly active question. Earn 10 reputation (not counting the association bonus) in order to answer this question. The reputation requirement helps protect this question from spam and non-answer activity.
- python
- бот
- discord
- discord.py
- искусственный-интеллект
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Источник: ru.stackoverflow.com
Как создать бота в Дискорде
Всем привет! Сегодня поговорим о том как сделать, написать и запустить своего бота в популярной бесплатной программе для общения Discord. Итак, поехали!
Как сделать Дискорд-бота на базе discord.js
На практике API Discord дает собой благоприятный инструмент, позволяющий сделать, а после чего применить бота. С его поддержкой просто создать ассистента для заключения различных задач, а дальше задать важный комплект команд.
Для примера разглядим артельный метод сотворения бота для музыки. При верном раскладе он может проигрывать, пропускать и одергивать музыкальные файлы. В его функциях еще есть помощь очереди на проигрывание мелодии.
Исполните надлежащие шаги.
Войдите на вебсайт discord.com/developers/applications/.
Нажимайте на кнопку New Application.
Введите заглавие грядущего бота Дискорд, к примеру, Music Bot.
Перейдите на вкладку Bot, а впоследствии нажимайте на кнопку Add Bot.
Данных поступков довольно, дабы сделать бота Дискорд, впоследствии чего надо его прибавить на сервер с поддержкой OAuth2 URL-генератора. Устройте надлежащие шаги.
Переместитесь в раздел OAuth2 и изберите Bot в панели Scopes.
Укажите нужные разрешения для проигрывания музыки и чтения.
Копируйте разработанный URL и воткните его в веб-проводник.
Изберите сервер, куда надо прибавить URL.
Нажимайте на кнопку авторизации (Authorize).
На надлежащем рубеже надо сделать план с использованием терминала.
Для сего смоделируйте директорию и перейдите ее с поддержкой надлежащих команд — mkdir musicbot cd musicbot. Дальше устройте надлежащее.
Смоделируйте модули плана с использованием nmp init.
Ответьте на некоторое количество вопросов, которые выжны, дабы сделать бота в Дискорд.
Устройте 2 файла, где станет вестись работа — touch index.js touch config.json.
Откройте план в редакторе, к примеру, с поддержкой VS Code с использованием приказа code.
Установите группу зависимостей, важных для последующей работы — npm install discord.js ffmpeg-binaries opusscript ytdl-core –save.
Продолжите создание файла на config.json. На данном рубеже сбережете префикс и токен для бота.
Войдите на портал создания Дискорд и копируйте токен из раздела Bot (жмите на кнопку Copy).
Теперь нужно создать код javascript. Для этого копируйте следующие зависимости:
const Discord = require(‘discord.js’);
const ytdl = require(‘ytdl-core’);
После этого нужно создать с применением токена клиент и логин.
const client = new Discord.Client();
Далее добавьте несколько listeners, которые выполняют console.log при пуске.
После этого начните работать с ботом Дискорд с применением node. Важно, чтобы вновь созданный Discord-бот был онлайн. В консоли появится Ready!. Команда — node index.js.
Задание команд для бота Дискорд
Теперь остается задать необходимые команды.
Для чтения сообщений
Чтобы Дискорд-бот мог читать, напишите функцию.
client.on(‘message’, async message =>
Далее сделайте listener для massage-события, получите сообщение и сохраните его в massage. Если информация пришла от бота Дискорд, игнорируйте ее. Выполните проверку с помощью следующей команды.
if (message.author.bot) return;
Если сообщение вернулось, значит, его смог создать бот. Теперь проверьте, с какого префикса оно начинается.
if (!message.content.startsWith(prefix)) return;
Далее проверьте команду, которую нужно активировать. Используйте следующие команды.
if (message.content.startsWith(`$play`))
> else if (message.content.startsWith(`$skip`))
> else if (message.content.startsWith(`$stop`))
message.channel.send(‘You need to enter a valid command!’)
После получения списка команд, которые можно запустить, переходите к их созданию.
Добавление песен
Здесь нужна гильдия, песня и библиотека ytdl (должна быть установлена заранее). Сделайте map с названием очереди, где будут храниться песни.
const queue = new Map();
Теперь создайте async0-функцию с названием execute и убедитесь, находится ли пользователь в чате, и имеется ли необходимое разрешение. При его отсутствии пишете сообщение об ошибке.
async function execute(message, serverQueue)
const args = message.content.split(‘ ‘);
const voiceChannel = message.member.voiceChannel;
if (!voiceChannel) return message.channel.send(‘You need to be in a voice channel to play music!’);
const permissions = voiceChannel.permissionsFor(message.client.user);
if (!permissions.has(‘CONNECT’) || !permissions.has(‘SPEAK’))
return message.channel.send(‘I need the permissions to join and speak in your voice channel!’);
Перейдите к получению данных о песне и сохраните ее в song. Для этого потребуется ytdl-библиотека, получающая данные по ютуб-ссылке.
const songInfo = await ytdl.getInfo(args[1]);
Необходимые данные сохраняются в song. Теперь нужно создать контракт, обеспечивающий добавление в очередь.
Проверьте факт определения serverQueue (проигрывание музыки), а после отправьте сообщение о достижении результата.
Если это не удалось сделать, нужно его создать и соединиться с голосовым каналом и начать играть песню.
return message.channel.send(`$ has been added to the queue!`);
В раздел serverQueue, если он пустой, добавьте трек. В случае, когда serverQueue имеет параметр null, сделайте контракт.
// Creating the contract for our queue
// Setting the queue using our contract
// Pushing the song to our songs array
// Here we try to join the voicechat and save our connection into our object.
var connection = await voiceChannel.join();
// Calling the play function to start a song
// Printing the error message if the bot fails to join the voicechat
Проигрывание трека
Теперь нужно создать опцию play для бота Дискорд с параметрами гильдия и песня, а также проверкой объекта song.
function play(guild, song)
const serverQueue = queue.get(guild.id);
Если да, нужно уйти с голосового канала и удалить очередь.
Далее трек играет с применением URL и playStream.
const dispatcher = serverQueue.connection.playStream(ytdl(song.url))
// Deletes the finished song from the queue
// Calls the play function again with the next song
Здесь создается stream, а его URL передается адресу песни.
Пропуск трека
Здесь оформите завершение диспетчера, который был сделан в опции play. Такое действие необходимо, чтобы начал играть очередной трек.
function skip(message, serverQueue)
if (!message.member.voiceChannel) return message.channel.send(‘You have to be in a voice channel to stop the music!’);
if (!serverQueue) return message.channel.send(‘There is no song that I could skip!’);
Здесь проверяется, есть ли пользователь в голосовом канале, и имеется ли трек для пропуска.
Опция stop подразумевает очистку массива song, удаления очереди и выхода из чата.
function stop(message, serverQueue)
if (!message.member.voiceChannel) return message.channel.send(‘You have to be in a voice channel to stop the music!’);
Полный код бота для Дискорд
const Discord = require(‘discord.js’);
const ytdl = require(‘ytdl-core’);
const client = new Discord.Client();
const queue = new Map();
client.on(‘message’, async message =>
if (message.author.bot) return;
if (!message.content.startsWith(prefix)) return;
const serverQueue = queue.get(message.guild.id);
if (message.content.startsWith(`$play`))
> else if (message.content.startsWith(`$skip`))
> else if (message.content.startsWith(`$stop`))
message.channel.send(‘You need to enter a valid command!’)
async function execute(message, serverQueue)
const args = message.content.split(‘ ‘);
const voiceChannel = message.member.voiceChannel;
if (!voiceChannel) return message.channel.send(‘You need to be in a voice channel to play music!’);
const permissions = voiceChannel.permissionsFor(message.client.user);
if (!permissions.has(‘CONNECT’) || !permissions.has(‘SPEAK’))
return message.channel.send(‘I need the permissions to join and speak in your voice channel!’);
const songInfo = await ytdl.getInfo(args[1]);
var connection = await voiceChannel.join();
return message.channel.send(`$ has been added to the queue!`);
function skip(message, serverQueue)
if (!message.member.voiceChannel) return message.channel.send(‘You have to be in a voice channel to stop the music!’);
if (!serverQueue) return message.channel.send(‘There is no song that I could skip!’);
function stop(message, serverQueue)
if (!message.member.voiceChannel) return message.channel.send(‘You have to be in a voice channel to stop the music!’);
function play(guild, song)
const serverQueue = queue.get(guild.id);
const dispatcher = serverQueue.connection.playStream(ytdl(song.url))
Как сделать бота в Дискорд на Python
Ещё раз метод — устроить Дискорд бота на Python. Артельный метод поступков грядущий.
Установите текстовый редактор.
Подготовьте Python 3.4.2+ и Pip3 (менеджер пакетов, важный для установки библиотек).
Смоделируйте бессодержательный файл с заглавием, к примеру, chatbot.py.
Откройте его с поддержкой текстового редактора и воткните код. Для его написания нужно обладать языком Python.
Образчик кода — gist.github.com/Tetraquark/911eb07052be10f0bb1323adb4056f86.
Поменяйте смысл переменной DISCORD_BOT_TOKEN, где надо сберечь токен бота.
Для получения инфы перейдите по ссылке discord.com/developers/applications, изберите необходимый бот Дискорд или же смоделируйте свежий, а впоследствии нажимайте на clich to reveal, где раскроется токен приложения.
Занести его в переменную DISCORD_BOT_TOKEN.
Сбережете файл и запустите бот Дискорд.
Для выполнения обозначенной повыше работы нужно владеть конкретным набором познаний.
Использование Discord Bot Maker
Как вариант, возможно сделать бота с поддержкой Discord Bot Maker. Это мощнейший инструмент, позволяющий устроить ассистента, умеющего отправлять файлы, генерировать и отправлять сообщения, манипулировать эмодзи, редактировать изображения и т. д.
Дабы сделать Дискорд-бота, устройте надлежащее.
Скачайте и установите утилиту.
Нажимайте на кнопку сотворения бота.
Установите нужные команды.
Сбережете и запустите bot для Дискорд
Процесс сотворения инстинктивно понятен, в следствие этого не станем становиться на нем подробнее.
Ныне вы понимаете, как устроить собственного бота Discord, и собственно что понадобится для заключения задачки. Для сего надо владеть конкретные способности программирования или, как вариант, применить Discord Bot Maker.
В случае если у вас нет бесполезного времени, чем какого-либо другого скачать готового ассистента и воспользоваться его вероятностями
Источник: user-life.com
Добро пожаловать!
Зарегистрировавшись у нас, вы сможете обсуждать, делиться и отправлять личные сообщения другим участникам нашего сообщества.
Если Вы желаете помогать развитию проекта, готовы заполнять раздел(-ы) и подсказывать другим пользователям на портале, есть возможность попасть в команду редакторов. Для этого следует обратиться в техническую поддержку
[ГАЙД] Создание Discord-бота с использованием C# и библиотеки Discord.net
- Автор темы UniOn
- Дата начала 22 Май 2022
UniOn
Продвинутый
Пользователь
Регистрация 22 Май 2022 Сообщения 11
Приветствую вас. В сегодняшнем гайде я покажу как создать своего Discord-бота, используя C# и библиотеку Discord.net.
Спойлер: Что нам понадобится
1. Установленная Visual Studio с набором для разработки классических .NET приложений
2. Доступ к интернету
3. Компьютер
4. Клавиатура
5, Компьютерная мышь
6. Монитор
7. [Желательно] Небольшой опыт работы с Visual Studio 2022/2019/2017 и C#
Спойлер: Создание самого бота
Прежде всего нам нужен сам бот, к которому мы будем подключаться
2. Даём имя будущему боту и создаём приложение
3. В новом окне довольно много всего, в чём вы можете самостоятельно разобраться. Нас же интересует «OAuth2» и «Bot»
4. Переходим в «Bot» и по нажатию кнопку в правой части экрана создаём самого бота
5. В новом окне включаем эти две галочки
а также в «Bot Permissions» снизу выбираем «Administrator»
6. Теперь переходим в «OAuth2», ставим галочки «Bot» и «Administrator» и копируем ссылку для приглашения бота
7. Переходим по этой ссылке и добавляем бота на сервер. Поздравляю! На данный момент у нас есть бот, который всегда в оффлайне и ничего не делает. Давайте его оживим
Спойлер: Создание проекта
Создаём консольное приложение .NET Core (кроссплатформенное, не .NET Framework). Думаю тут справится каждый, но если надо могу сделать гайд по установке Visual Studio и созданию проекта в ней.
Спойлер: Установка необходимых пакетов
Отлично! Теперь нам нужно установить необходимые пакеты для работы с библиотекой Discord.net. Клацаем правой кнопкой мыши по нашему проекту и ищем NuGet
В открывшемся окне устанавливаем Discord.Addons.Hosting. Discord.Net, Discord.Net.Core, Discord.Net.WebSocket, Discord.Net.Commands и Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.Logging, Microsoft.Extensions.Hosting, Microsoft.Extensions.Configuration
Спойлер: Оживление бота
static async Task Main() < var builder = new HostBuilder() .ConfigureAppConfiguration(x =>< var config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile(«config.json», false, true) .Build(); x.AddConfiguration(config); >) .ConfigureLogging(x => < x.AddConsole(); x.SetMinimumLevel(LogLevel.Debug); // вместо Debug можно поставить другие уровни, но в нашем случае это самый оптимальный вариант >) .ConfigureDiscordHost((context, config) => < config.SocketConfig = new DiscordSocketConfig < LogLevel = LogSeverity.Debug, AlwaysDownloadUsers = false, MessageCacheSize = 200 >; config.Token = context.Configuration[«token»]; >) .UseCommandService((context, config) => < config.CaseSensitiveCommands = false; config.LogLevel = LogSeverity.Debug; config.DefaultRunMode = RunMode.Async; >) .ConfigureServices((context, services) => < // чуть позже мы это раскоментируем //services // .AddHostedService(); >) // думаю тут понятно .UseConsoleLifetime(); var host = builder.Build(); using (host) < // запускаем бота await host.RunAsync(); >>
(НАВЕДИТЕСЬ НА ОШИБКУ ЕСЛИ ОНА ВОЗНИКАЕТ — СКОРЕЕ ВСЕГО ВЫ ПРОСТО НЕ ПОДКЛЮЧИЛИ В USING’АХ БИБЛИОТЕКИ, КОТОРЫЕ МЫ УСТАНАВЛИВАЛИ В НАЧАЛЕ ГАЙДА)
Но не спешите это запускать. Теперь нам нужно добавить файл конфигурации config.json, а также обработчик команд и сами команды.
Кликаем правой кнопкой мыши по проекту и создаём json файл и пишем в нем это:
JavaScript:
Чтобы получить токен переходим сюда
во вкладку «Bot» и нажимаем Copy. Вставляем его вместо «ВАШ ТОКЕН»
ВАЖНО! Клацаем по config.json (или как вы его там назвали) и переходим, в моем случае. в Properties. В открывшемся окне ставим вместо Do not copy -> Copy if newer
Теперь с помощью CTRL+F5 можно запустить нашего бота и он будет онлайн в дискорде до тех пор, пока вы не закроете приложение
Спойлер: Создание команд и их оброботчика
В CommandHandler.cs:
public class CommandHandler : InitializedService < private readonly IServiceProvider _provider; private readonly DiscordSocketClient _client; private readonly CommandService _service; private readonly IConfiguration _config; public CommandHandler(IServiceProvider provider, DiscordSocketClient client, CommandService service, IConfiguration config) < _provider = provider; _client = client; _service = service; _config = config; >public override async Task InitializeAsync(CancellationToken cancellationToken) < _client.MessageReceived += OnMessageRecevied; _service.CommandExecuted += OnCommandExecuted; await _service.AddModulesAsync(Assembly.GetEntryAssembly(), _provider); >private async Task OnCommandExecuted(Optional commandInfo, ICommandContext commandContext, IResult result) < if (result.IsSuccess) < return; >await commandContext.Channel.SendMessageAsync(result.ErrorReason); > private async Task OnMessageRecevied(SocketMessage socketMsg) < if (!(socketMsg is SocketUserMessage message)) return; if (message.Source != MessageSource.User) return; var argPos = 0; if (!message.HasStringPrefix(_config[«prefix»], ref argPos) !message.HasMentionPrefix(_client.CurrentUser, ref argPos)) return; var context = new SocketCommandContext(_client, message); await _service.ExecuteAsync(context, argPos, _provider); >>
Наш бот теперь может обрабатывать команды, почти готово! Осталось лишь добавить файл с командами. Опять же для удобства создадим папку Modules и добавим в нее файл класса General.cs
Кстати, раскоментируем-ка кое-что в Program.cs:
.ConfigureServices((context, services) => < services .AddHostedService(); >)
public class General : ModuleBase
Класс и всё необходимое создано, как же добавить команды?
Создадим команду, которая повторяет сообщение пользователя:
public class General : ModuleBase < [Command(«echo»)] private async Task Echo(string msg) < await Context.Channel.SendMessageAsync(msg); >>
Или что-нибудь поинтереснее, например, вывод информации о пользователе:
[Command(«info»)] private async Task Info(SocketGuildUser socketGuildUser = null) < if (socketGuildUser == null) < var embed = new EmbedBuilder() .WithColor(Color.Orange) .WithTitle(Context.User.Username) .WithImageUrl(Context.User.GetAvatarUrl()) .AddField(«User ID:», Context.User.Id, true) .AddField(«Created at», Context.User.CreatedAt, true); await Context.Channel.SendMessageAsync(embed: embed.Build()); >else < var embed = new EmbedBuilder() .WithColor(Color.Orange) .WithTitle(socketGuildUser.Username) .WithImageUrl(socketGuildUser.GetAvatarUrl()) .AddField(«User ID:», socketGuildUser.Id, true) .AddField(«Created at:», socketGuildUser.CreatedAt, true); await Context.Channel.SendMessageAsync(embed: embed.Build()); >>
Спойлер: Завершение
На этом пока что всё. Подробнее о командах, методах и всём можно узнать просто покопавшись в коде или в документации
Источник: pawno-help.ru