Это моя текущая кодовая база для бота 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");
}
}
}