当前位置: 首页 > 知识库问答 >
问题:

会员加入频道的不和机器人事件

蒙化
2023-03-14

我希望我的Discord机器人在成员加入频道时向他们致意。我一直找不到在这种情况下触发的事件。我试过我的客户。UserJoined=MyMethod

public class Program
{
    private DiscordSocketClient _client;
    private CommandService _commands;
    private IServiceProvider _services;

    static void Main(string[] args)
    => new Program().RunBotAsync().GetAwaiter().GetResult();

    public async Task RunBotAsync()
    {
        _client = new DiscordSocketClient();
        _commands = new CommandService();
        _services = new ServiceCollection()
            .AddSingleton(_client)
            .AddSingleton(_commands)
            .BuildServiceProvider();

        string botToken = // removed

        _client.Log += Log;

        await RegisterCommandsAsync();
        await _client.LoginAsync(TokenType.Bot, botToken);
        await _client.StartAsync();
        await Task.Delay(-1);
    }

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

    public async Task RegisterCommandsAsync()
    {
        _client.MessageReceived += HandleCommandAsync;
        _client.UserJoined += JoinedAsync; // Something like this to notify bot when someone has joined chat?

        await _commands.AddModulesAsync(Assembly.GetEntryAssembly());
    }

    private Task JoinedAsync(SocketGuildUser arg)
    {
        throw new NotImplementedException();
    }

    private async Task HandleCommandAsync(SocketMessage arg)
    {
        var message = arg as SocketUserMessage;

        if(message is null || message.Author.IsBot)
        {
            return;
        }

        int argPos = 0;

        if (message.HasStringPrefix("!", ref argPos))
        {
            var context = new SocketCommandContext(_client, message);
            await _commands.ExecuteAsync(context, argPos);
        }
    }
}

谢谢,如果我能提供更多的信息,请告诉我。

编辑:建议的链接实现了用户加入事件,该事件似乎仅在新成员加入频道时触发。我需要每次有人登录频道时触发的东西,即使是现有成员。

共有1个答案

蓝星辰
2023-03-14

从编辑来看,我认为你可能对频道的工作方式有一点误解。

用户加入公会,之后,他们就成为公会的一部分<当他们加入公会后,他们是公会的一部分,他们可以看到的频道。因此,不再需要登录通道。

现在,我认为您想要实现的是在用户从脱机状态切换到联机状态时,通过通道/向用户发送消息。

为此,您可以使用“用户更新”事件。在这里,您可以检查用户的以前和当前状态,并相应地发送消息。

_client.UserUpdated += async (before, after) =>
{
   // Check if the user was offline, and now no longer is
   if(before.Status == UserStatus.Offline && after.Status != UserStatus.Offline)
   {
      // Find some channel to send the message to
      var channel = e.Server.FindChannels("Hello-World", ChannelType.Text);
      // Send the message you wish to send
      await channel.SendMessage(after.Name + " has come online!");
   }
}
 类似资料:
  • 我希望我的不和谐机器人加入语音频道。但是我遇到了一个问题,每当我想让它加入风投时,什么都不会发生——甚至没有错误。我尝试过SO/Git的其他解决方案,但没有一个适合我(下面有一个)。 编辑:解决了!问题是:没有不和。已安装py[语音]模块。解决方案:

  • 我正在努力让我的机器人进入语音频道,我已经阅读了这里的很多帖子,但没有一篇能够解决我的问题,我正在尝试让我的机器人复制yt视频的声音,但它甚至没有加入,我不知道该怎么办,下面是代码:

  • 我在使用Discord。js创建一个基本的Discord机器人。当bot第一次启动时,我运行获取机器人当前订阅的所有协会的列表。我将其保存到其他程序使用的数据库中。 然而,当人们从他们的公会中添加/删除机器人时,我想保留一个更新的公会列表。我意识到我可以每分钟重新运行,但这似乎效率低下。 当你的机器人被添加到公会和/或频道时,是否有触发的事件?据我所知,事件似乎针对所有已经订阅该公会的用户/机器人

  • 这是很新的。我一直在阅读readthedocs API参考资料以了解不和谐。这对我来说没什么意义。到目前为止我有 我们的目标是让机器人加入带有的用户加入的语音频道,但我在让机器人加入频道时遇到了麻烦。

  • 我正在尝试让我的discord机器人连接到一个语音频道,目前如下所示: 基本上,当他们发送消息时,我希望它加入消息作者的语音频道“-skip”,然后我的机器人加入,在聊天中说-p scotland forever,然后离开。我收到一条错误消息,说“频道”未定义或“连接”未定义,我尝试了几种不同的方法,我想我只是没有导入插件或其他东西,这可能是我的问题,但我知道应该使用什么插件。任何帮助都将不胜感激

  • 下午好 我再次有一个关于不和谐蟒蛇机器人的问题。所以我想做一些支持脚本之类的东西。我的想法是给所有的支持者写一个命令,如果他们值班的话,保存在一个json文件中。这没问题,但我的问题是,我希望用户在连接到一个名为“支持室”的特定语音频道时,收到多少支持者在值班。有人知道我如何写一个脚本,当一个成员加入这个特定的语音频道时,他会收到一条信息,例如:member.send(“你现在在支持室”。请等到支