Пытаюсь сделать приветственное сообщение для новых участников, но большинство вещей, которые я пробовал, вообще не работают.

Это моя текущая кодовая база для бота Discord, которую я начал создавать. Пока я могу заставить его отвечать на команды через отдельный файл, который либо отвечает определением терминологии, либо вычисляет разные вещи. Сейчас я пытаюсь заставить его отправлять приветственное сообщение на приветственный канал, когда присоединяются новые участники, и мне совсем не повезло. Я довольно новичок в C # и Discord.net в целом, и многое из того, что я узнал, было получено в результате смешивания идей из разных видео на YouTube, а также других ответов на подобные вопросы здесь, которые я не могу заставить работать. Любые указатели будут высоко оценены.

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Discord;
using Discord.Commands;
using Discord.WebSocket;
using Microsoft.Extensions.DependencyInjection;

namespace RCMC_Bot
{
    class Program
    {
        readonly DateTime now = DateTime.Now;
        static void Main(string[] args)
        {
            if (args is null)
            {
                return;
            }

            new Program().RunBotAsync().GetAwaiter().GetResult();
        }

        private DiscordSocketClient _client;
        private CommandService _commands;
        private IServiceProvider _services;

        public async Task RunBotAsync()
        {
            _client = new DiscordSocketClient();
            _commands = new CommandService();

            _services = new ServiceCollection()
                .AddSingleton(_client)
                .AddSingleton(_commands)
                .BuildServiceProvider();

            _client.UserJoined += AnnounceUserJoin;

            string token = File.ReadAllText("token.txt");

            _client.Log += Client_Log;

            await RegisterCommandAsync();

            await _client.LoginAsync(TokenType.Bot, token);

            await _client.StartAsync();

            await Task.Delay(-1);

        }

        private Task Client_Log(LogMessage arg)
        {
            Console.WriteLine(arg);
            return Task.CompletedTask;
        }

        public async Task RegisterCommandAsync()
        {
            _client.MessageReceived += HandleCommandAsync;
            await _commands.AddModulesAsync(Assembly.GetEntryAssembly(), _services);
        }

        private async Task HandleCommandAsync(SocketMessage arg)
        {
            var message = arg as SocketUserMessage;
            var context = new SocketCommandContext(_client, message);
            if (message.Author.IsBot) return;

            int argPos = 0;
            if (message.HasStringPrefix("+", ref argPos))
            {
                var result = await _commands.ExecuteAsync(context, argPos, _services);
                if (!result.IsSuccess) Console.WriteLine(result.ErrorReason);
            }
        }
        public async Task AnnounceUserJoin(SocketGuildUser user)
        {
            var embed = new EmbedBuilder();
            var sb = new StringBuilder();
            embed.WithColor(new Color(0, 255, 0));
            embed.Title = "Welcome To RCMC";
            sb.AppendLine(user.Mention);
            sb.AppendLine("A community dedicated to helping people learn how to customize their Nitrado DayZ servers for consoles.");
            embed.Description = sb.ToString();
            var channel = _client.GetChannel(768081313420017696) as SocketTextChannel;
            await channel.SendMessageAsync(null, false, embed.Build());
            Console.WriteLine(now.ToString("F") + " " + user.Mention + " user join");
        }
    }
}

person Reaver    schedule 07.03.2021    source источник
comment
У вас должны быть включены намерения на портале разработчиков разногласий для запуска события присоединения пользователя.   -  person Anu6is    schedule 08.03.2021
comment
ага, даже не подумал проверить! благодарю вас. надеюсь, теперь это будет работать :) просто подождем, пока кто-нибудь присоединится к серверу: D   -  person Reaver    schedule 08.03.2021
comment
кажется, что разрешенных намерений было недостаточно, чтобы все заработало. я уверен, что упускаю из виду что-то простое.   -  person Reaver    schedule 08.03.2021
comment
Вы так и не сказали, что именно не работает. Даже мой первый ответ был просто предположением. Событие не сработает, если намерения не включены, но я даже не знаю, срабатывало ваше событие или нет. Он не срабатывает и до сих пор не работает? До сих пор не стреляет?   -  person Anu6is    schedule 08.03.2021
comment
я спрашиваю, как заставить работать приветственное сообщение, когда новые участники присоединяются к серверу. теперь у меня включены намерения, но все равно появляется код, который у меня не работает   -  person Reaver    schedule 08.03.2021
comment
Я знаю, к какому результату вы стремитесь. Однако вы не указываете, что именно не работает. Чтобы отправить приветственное сообщение, вы подписываетесь на событие присоединения пользователя и отправляете сообщение, когда событие срабатывает. Это общий ответ на ваш вопрос (который вы уже делаете). Так что вопрос в том, что именно у вас не работает. Выполняется ли ваш метод AnnounceUserJoin, генерируется ли исключение, где именно что-то идет не так. Вы не можете просто сказать, что это не работает   -  person Anu6is    schedule 08.03.2021
comment
кажется, что ничего не происходит, когда присоединяются новые пользователи. поэтому я должен предположить, что метод AnnounceUserJoin не запускается.   -  person Reaver    schedule 08.03.2021
comment
Нет, вам не нужно предполагать... вам нужно отлаживать и подтверждать. Вы никогда не должны делать предположения о собственном коде.   -  person Anu6is    schedule 08.03.2021
comment
не совсем уверен, как отладить эту проблему, в консоли ничего не отображается для присоединения пользователей, и сообщение не передается в канал, как ожидалось. будучи таким же новичком в С#, как и я, я не вижу, как действовать, поскольку я не получаю никаких ошибок или исключений   -  person Reaver    schedule 08.03.2021


Ответы (1)


Проблема решена! Похоже, мое включение намерений не сохранилось должным образом. Теперь исправлено и приветственное сообщение работает.

person Reaver    schedule 08.03.2021