Форум программистов, компьютерный форум, киберфорум
C#: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 18.05.2024
Сообщений: 3
Discord Bot

Как сделать музыкального дискорд бота?

18.05.2024, 14:58. Показов 2314. Ответов 7

Студворк — интернет-сервис помощи студентам
Я не знаю что делать, я пытаюсь сделать дискорд бота на C# который будет играть песню song.mp3 из той же директории что и код но мне выдает ошибки:

G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\main.cs(82,17): error CS0103: Имя "_audioClient" не существует в текущем контексте. [G:\Chopic\ChopikMusicDiscord\ChopikMusic Disc
ord\ChopikMusicDiscord.csproj]
G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\main.cs(106,19): error CS0103: Имя "_audioClient" не существует в текущем контексте. [G:\Chopic\ChopikMusicDiscord\ChopikMusic Dis
cord\ChopikMusicDiscord.csproj]
G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\main.cs(107,19): error CS0103: Имя "_audioClient" не существует в текущем контексте. [G:\Chopic\ChopikMusicDiscord\ChopikMusic Dis
cord\ChopikMusicDiscord.csproj]
G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\main.cs(112,17): error CS0103: Имя "_audioClient" не существует в текущем контексте. [G:\Chopic\ChopikMusicDiscord\ChopikMusic Dis
cord\ChopikMusicDiscord.csproj]
G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\main.cs(118,19): error CS0103: Имя "_audioClient" не существует в текущем контексте. [G:\Chopic\ChopikMusicDiscord\ChopikMusic Dis
cord\ChopikMusicDiscord.csproj]
G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\main.cs(119,19): error CS0103: Имя "_audioClient" не существует в текущем контексте. [G:\Chopic\ChopikMusicDiscord\ChopikMusic Dis
cord\ChopikMusicDiscord.csproj]
G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\main.cs(120,13): error CS0103: Имя "_audioClient" не существует в текущем контексте. [G:\Chopic\ChopikMusicDiscord\ChopikMusic Dis
cord\ChopikMusicDiscord.csproj]
G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\main.cs(121,29): warning CS8625: Литерал, равный NULL, не может быть преобразован в ссылочный тип, не допускающий значение NULL.
[G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\ChopikMusicDiscord.csproj]
G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\main.cs(126,13): error CS0103: Имя "channel" не существует в текущем контексте. [G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\
ChopikMusicDiscord.csproj]
G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\main.cs(126,23): error CS0103: Имя "channel" не существует в текущем контексте. [G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\
ChopikMusicDiscord.csproj]
G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\main.cs(126,35): error CS0103: Имя "Context" не существует в текущем контексте. [G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\
ChopikMusicDiscord.csproj]
G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\main.cs(127,17): error CS0103: Имя "channel" не существует в текущем контексте. [G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\
ChopikMusicDiscord.csproj]
G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\main.cs(127,41): error CS0103: Имя "Context" не существует в текущем контексте. [G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\
ChopikMusicDiscord.csproj]
G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\main.cs(129,37): error CS0103: Имя "channel" не существует в текущем контексте. [G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\
ChopikMusicDiscord.csproj]
G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\main.cs(82,17): error CS0103: Имя "_audioClient" не существует в текущем контексте. [G:\Chopic\ChopikMusicDiscord\ChopikMusic Disc
ord\ChopikMusicDiscord.csproj]
G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\main.cs(106,19): error CS0103: Имя "_audioClient" не существует в текущем контексте. [G:\Chopic\ChopikMusicDiscord\ChopikMusic Dis
cord\ChopikMusicDiscord.csproj]
G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\main.cs(107,19): error CS0103: Имя "_audioClient" не существует в текущем контексте. [G:\Chopic\ChopikMusicDiscord\ChopikMusic Dis
cord\ChopikMusicDiscord.csproj]
G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\main.cs(112,17): error CS0103: Имя "_audioClient" не существует в текущем контексте. [G:\Chopic\ChopikMusicDiscord\ChopikMusic Dis
cord\ChopikMusicDiscord.csproj]
G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\main.cs(118,19): error CS0103: Имя "_audioClient" не существует в текущем контексте. [G:\Chopic\ChopikMusicDiscord\ChopikMusic Dis
cord\ChopikMusicDiscord.csproj]
G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\main.cs(119,19): error CS0103: Имя "_audioClient" не существует в текущем контексте. [G:\Chopic\ChopikMusicDiscord\ChopikMusic Dis
cord\ChopikMusicDiscord.csproj]
G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\main.cs(120,13): error CS0103: Имя "_audioClient" не существует в текущем контексте. [G:\Chopic\ChopikMusicDiscord\ChopikMusic Dis
cord\ChopikMusicDiscord.csproj]

вот мой код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
using Discord;
using Discord.WebSocket;
using System;
using System.Threading.Tasks;
using System.IO;
using System.Linq;
using System.Diagnostics;
 
namespace DiscordChopic
{
    public class Program
    {
 
        private DiscordSocketClient _client;
 
        private IVoiceChannel _voiceChannel;
 
        public static void Main(string[] args)
        {
            new Program().MainAsync().GetAwaiter().GetResult();
        }
 
        public async Task MainAsync()
        {
            // Replace with your Discord bot token
            var token = File.ReadAllText("token.txt");
 
            _client = new DiscordSocketClient();
 
            _client.Log += Log;
            _client.Ready += Ready;
            _client.MessageReceived += MessageReceived;
 
            await _client.LoginAsync(TokenType.Bot, token);
            await _client.StartAsync();
 
            await Task.Delay(-1); // Keep the bot running indefinitely
        }
 
        private Task Log(LogMessage msg)
        {
            Console.WriteLine(msg.ToString());
            return Task.CompletedTask;
        }
 
        private async Task Ready()
        {
            Console.WriteLine("Bot is connected!");
        }
 
        private async Task MessageReceived(SocketMessage message)
        {
            if (message.Author.IsBot) return; // Ignore messages from bots
 
            // Check if the message starts with the bot's prefix
            if (!message.Content.StartsWith("$")) return;
 
            // Split the message into command and arguments
            var parts = message.Content.Split(' ');
            var command = parts[0].Substring(1);
 
            // Handle play command
            if (command.Equals("play", StringComparison.OrdinalIgnoreCase))
            {
                await PlayMusic(message, parts);
            }
 
            // Handle stop command
            if (command.Equals("stop", StringComparison.OrdinalIgnoreCase))
            {
                await StopMusic(message);
            }
 
            // Handle join command
            if (command.Equals("join", StringComparison.OrdinalIgnoreCase))
            {
                await JoinVoiceChannel(message);
            }
        }
        private async Task PlayMusic(SocketMessage message, string[] parts)
        {
            if (_audioClient == null)
            {
                await message.Channel.SendMessageAsync("Bot is not connected to a voice channel. Use $join first.");
                return;
            }
 
            if (parts.Length < 2)
            {
                await message.Channel.SendMessageAsync("Please provide a song name.");
                return;
            }
 
            var songName = parts[1];
 
            // Check if the song exists in the directory
            var songPath = Path.Combine(Directory.GetCurrentDirectory(), songName + ".mp3");
            if (!File.Exists(songPath))
            {
                await message.Channel.SendMessageAsync($"Song '{songName}' not found in the directory.");
                return;
            }
 
            // Play the song
            var stream = File.OpenRead(songPath);
            await _audioClient.SetSpeakingAsync(true);
            await _audioClient.PlayAsync(stream);
            await message.Channel.SendMessageAsync($"Now playing: {songName}");
        }
        private async Task StopMusic(SocketMessage message)
        {
            if (_audioClient == null)
            {
                await message.Channel.SendMessageAsync("Bot is not connected to a voice channel.");
                return;
            }
 
            await _audioClient.StopAsync();
            await _audioClient.DisconnectAsync();
            _audioClient = null;
            _voiceChannel = null;
            await message.Channel.SendMessageAsync("Stopped playing music.");
        }
        private async Task JoinVoiceChannel(SocketMessage message)
        {
            channel = channel ?? (Context.User as IGuildUser)?.VoiceChannel;
            if (channel == null) {await Context.Channel.SendMessageAsync("User must be in a voice channel, or a voice channel must be passed as an argument."); return; }
 
            var audioClient = await channel.ConnectAsync();
        } 
    }
}
Я знаю что возможно ошибки очевидные, но я только недавно начал интерисоваться C# дискорд ботами и я не понимаю как это починить. И да, в файле token.txt написан токен ДС бота
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.05.2024, 14:58
Ответы с готовыми решениями:

Как создать музыкального бота в telegram?
Всем здравствуйте! Я начинающий программер. Я хочу создать своего музыкального бота telegram! Чтобы в нём были такие функции: 1. Поиск...

Как вызвать функцию дискорд бота прямо из кода, а не из чата в дискорде?
Перечитал всю документацию, но ничего не нашел по поводу того, как можно вызвать команду бота, не используя чат дискорда. То есть, у...

Подноготная дискорд бота
здравствуйте товарищи! Недавно столкнулся с внутренними багами npm пакета discord.js. Долго пытался найти дыры в своём коде, который ещё...

7
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,845
Записей в блоге: 1
18.05.2024, 15:30
kotaroTOP, где вы взяли этот код?
0
 Аватар для sau
2773 / 2073 / 386
Регистрация: 22.07.2011
Сообщений: 7,820
18.05.2024, 16:59
Цитата Сообщение от kotaroTOP Посмотреть сообщение
но я только недавно начал интерисоваться C#
следует начать с изучения основ языка , ботов еще рано писать.
а проблема черным по белому обозначена , прежде чем использовать переменные , их нужно обьявить.
0
0 / 0 / 0
Регистрация: 18.05.2024
Сообщений: 3
18.05.2024, 18:49  [ТС]
Я сам его писал и иногда просил ChatGPT помочь

Добавлено через 1 минуту
Основы языка я знаю, только массивы до конца не могу понять но они тут ни причем я имею ввиду что дискорд ботами на C# начал недавно интересоваться и я уже немного поменял код
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,845
Записей в блоге: 1
18.05.2024, 18:51
Цитата Сообщение от kotaroTOP Посмотреть сообщение
ногда просил ChatGPT помочь
Значит cпросите его как исправить данные ошибки компиляции.
0
0 / 0 / 0
Регистрация: 18.05.2024
Сообщений: 3
18.05.2024, 18:53  [ТС]
Я спрашивал, нормального ответа не получил и да я изменил код, (изменил код и ошибки изменились само собой, теперь их 3)
Я немного изменил код и ошибки новые, начну с кода
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
using Discord;
using Discord.WebSocket;
using System;
using System.Threading.Tasks;
using Discord.Audio;
using System.IO;
using System.Linq;
using System.Diagnostics;
using Discord.Commands;
 
namespace DiscordChopic
{
    public class Program
    {
 
        private DiscordSocketClient _client;
        private IAudioClient _audioClient;
        private IVoiceChannel _voiceChannel;
 
        public static void Main(string[] args)
        {
            new Program().MainAsync().GetAwaiter().GetResult();
        }
 
        public async Task MainAsync()
        {
            // Replace with your Discord bot token
            var token = File.ReadAllText("token.txt");
 
            _client = new DiscordSocketClient();
 
            _client.Log += Log;
            _client.Ready += Ready;
            _client.MessageReceived += HandleMessage;
 
            await _client.LoginAsync(TokenType.Bot, token);
            await _client.StartAsync();
 
            await Task.Delay(-1); // Keep the bot running indefinitely
        }
 
        private Task Log(LogMessage msg)
        {
            Console.WriteLine(msg.ToString());
            return Task.CompletedTask;
        }
 
        private async Task Ready()
        {
            Console.WriteLine("Bot is connected!");
        }
 
        private async Task HandleMessage(SocketMessage message)
        {
            if (message.Author.IsBot) return; // Ignore messages from bots
 
            // Check if the message starts with the bot's prefix
            if (!message.Content.StartsWith("$")) return;
 
            // Split the message into command and arguments
            var parts = message.Content.Split(' ');
            var command = parts[0].Substring(1);
 
            // Handle play command
            if (command.Equals("play", StringComparison.OrdinalIgnoreCase))
            {
                await PlayMusic(message, parts);
            }
 
            // Handle stop command
            if (command.Equals("stop", StringComparison.OrdinalIgnoreCase))
            {
                await StopMusic(message);
            }
 
            // Handle join command
            if (command.Equals("join", StringComparison.OrdinalIgnoreCase))
            {
                await JoinVoiceChannel();
            }
        }
        [Command("play")]
        private async Task PlayMusic(SocketMessage message, string[] parts)
        {
            if (_audioClient == null)
            {
                await message.Channel.SendMessageAsync("Bot is not connected to a voice channel. Use $join first.");
                return;
            }
 
            if (parts.Length < 2)
            {
                await message.Channel.SendMessageAsync("Please provide a song name.");
                return;
            }
 
            var songName = parts[1];
            var songPath = Path.Combine(Directory.GetCurrentDirectory(), songName + ".mp3");
            if (!File.Exists(songPath))
            {
                await message.Channel.SendMessageAsync($"Song '{songName}' not found in the directory.");
                return;
            }
 
 
            var stream = File.OpenRead(songPath);
            await _audioClient.SetSpeakingAsync(true);
            await _audioClient.PlayAsync(stream);
            await message.Channel.SendMessageAsync($"Now playing: {songName}");
        }
        [Command("stop")]
        private async Task StopMusic(SocketMessage message)
        {
            if (_audioClient == null)
            {
                await message.Channel.SendMessageAsync("Bot is not connected to a voice channel.");
                return;
            }
    
            await _audioClient.StopAsync();
            await _audioClient.DisconnectAsync();
            _audioClient = null;
            _voiceChannel = null;
            await message.Channel.SendMessageAsync("Stopped playing music.");
        }
        [Command("join")]
        private async Task JoinVoiceChannel(IVoiceChannel channel, SocketCommandContext Context)
        {
            channel = channel ?? (Context.User as IGuildUser)?.VoiceChannel;
            if (channel == null) {await Context.Channel.SendMessageAsync("User must be in a voice channel, or a voice channel must be passed as an argument."); return; }
 
            var audioClient = await channel.ConnectAsync();
        } 
    }
}
а вот ошибки

G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\main.cs(79,23): error CS7036: Отсутствует аргумент, соответствующий требуемому параметру "channel" из "Program.JoinVoiceChannel(I
VoiceChannel, SocketCommandContext)". [G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\ChopikMusicDiscord.csproj]
G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\main.cs(108,32): error CS1061: "IAudioClient" не содержит определения "PlayAsync", и не удалось найти доступный метод расширения
"PlayAsync", принимающий тип "IAudioClient" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку). [G:\Chopic\ChopikMusicDiscord\ChopikMusic Dis
cord\ChopikMusicDiscord.csproj]
G:\Chopic\ChopikMusicDiscord\ChopikMusic Discord\main.cs(121,32): error CS1061: "IAudioClient" не содержит определения "DisconnectAsync", и не удалось найти доступный метод расши
рения "DisconnectAsync", принимающий тип "IAudioClient" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку). [G:\Chopic\ChopikMusicDiscord\Ch
opikMusicDiscord\ChopikMusicDiscord.cspr oj]

 Комментарий администратора 
kotaroTOP, не нужно создавать новую тему если вопрос не изменился. Это только создает путаницу. Поэтому я перенес код из вашей новой темы сюда.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,845
Записей в блоге: 1
18.05.2024, 19:07
Цитата Сообщение от kotaroTOP Посмотреть сообщение
Я спрашивал, нормального ответа не получил
Не сдавайтесь. Спросите у него какой тип реализует интерфейс IAudioClient.
1
 Аватар для sau
2773 / 2073 / 386
Регистрация: 22.07.2011
Сообщений: 7,820
20.05.2024, 00:09
kotaroTOP, а где инициализация переменной _audioClient ?
и зачем в 132 строке создается локальная переменная audioClient , если она более нигде не используется ?

Добавлено через 2 минуты
П.С Гпт зачастую не может написать работающий код , т.к он тупо клеит без понимания из разных источников куски кода , которые друг с другом не всегда стыкуются.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.05.2024, 00:09
Помогаю со студенческими работами здесь

Ошибка в запуске дискорд бота, discord.py
Сделал бота на discord.py Запускаю, а он выдает ошибку Traceback (most recent call last): File...

Исправить ошибки в коде Дискорд бота
И так, писал я код для бота в Thonny, игра 'камень ножницы бумага', и тут ошибки: Line 94: Item &quot;None&quot; of...

Нужно написать бота для дискорд
На данное ТЗ На сервере создаем 4 роли - РЯДОВОЙ, ВЕТЕРАН, ОФИЦЕР, ГЛАВА Создаем на сервере текстовый канал, даем боту права на запись...

Отправка сообщения дискорд бота по таймеру
Доброго дня. Создаю бота для discord. Интересует возможно ли отправлять сообщения от него по какому-то кулдавуну без вмешательства...

Автосоздание матчей через дискорд бота на сайте csgo.fastcup.net
Как можно реализовать автосоздание матчей через дискорд бота на сайте csgo.fastcup.net. Доступ к API закрыт


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru