试图向新成员发送欢迎信息,但我尝试过的大多数事情似乎根本不起作用

Posted

技术标签:

【中文标题】试图向新成员发送欢迎信息,但我尝试过的大多数事情似乎根本不起作用【英文标题】:Trying to make a welcome message for new members but most things i have tried seem not to work at all 【发布时间】:2021-06-05 20:20:15 【问题描述】:

这是我目前已开始构建的 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");
        
    

【问题讨论】:

您需要在 Discord 开发者门户上启用 Intent 才能触发用户加入的事件。 啊,没想到要检查一下!谢谢。希望它现在可以工作了 :) 只是等待有人加入服务器 :D 似乎启用意图不足以让事情正常进行。我确定我缺少/忽略了一些简单的东西。 你还没有真正说出究竟是什么不起作用。甚至我的第一反应也只是一个假设。如果未启用意图,该事件将不会触发,但我什至不知道您的事件是否触发。它不会触发并且仍然无法正常工作吗?还没开火吗? 我在问如何在新成员加入服务器时获得欢迎消息。我现在启用了意图,但仍然显示我的代码不起作用 【参考方案1】:

问题已解决!似乎我的意图启用没有正确保存。现在已更正,欢迎消息正在运行。

【讨论】:

以上是关于试图向新成员发送欢迎信息,但我尝试过的大多数事情似乎根本不起作用的主要内容,如果未能解决你的问题,请参考以下文章

向新加入的 Discord 成员公开问候

Mailchimp API 向新成员和现有成员添加标签

是否有与通过电子邮件向新用户发送身份验证令牌相关的 NIST 标准?

想要向新用户显示欢迎页面,并在 Flutter Firebase 中向登录用户显示主屏幕

滑入iOS菜单

绘制最大似然估计的置信区间