示例#1
0
 private async Task OnPresenceUpdated(PresenceUpdateEventArgs e)
 {
     if (PresenceUpdated != null)
     {
         await PresenceUpdated(e);
     }
 }
示例#2
0
        private Task Discord_PresenceUpdate(PresenceUpdateEventArgs e)
        {
            //if (e.User != null)
            //    this.Discord.DebugLogger.LogMessage(LogLevel.Unnecessary, "DSPlus Test", $"{e.User.Username}#{e.User.Discriminator} ({e.UserID}): {e.Status ?? "<unknown>"} playing {e.Game ?? "<nothing>"}", DateTime.Now);

            return(Task.Delay(0));
        }
示例#3
0
        private async Task PresenceUpdatedHandler(DiscordClient s, PresenceUpdateEventArgs e)
        {
            var _streamerrole = s.GetGuildAsync(Settings.GetSection("discord").GetValue <ulong>("guild")).Result
                                .GetRole(Settings.GetSection("discord").GetValue <ulong>("streamer"));
            var _liverole = s.GetGuildAsync(Settings.GetSection("discord").GetValue <ulong>("guild")).Result
                            .GetRole(Settings.GetSection("discord").GetValue <ulong>("live"));
            var _memberUser = s.GetGuildAsync(Settings.GetSection("discord").GetValue <ulong>("guild")).Result.GetMemberAsync(e.User.Id).Result;
            var womp        = s.GetGuildAsync(Settings.GetSection("discord").GetValue <ulong>("guild")).Result
                              .GetMemberAsync(Settings.GetSection("discord").GetValue <ulong>("womp")).Result;

            if (e.Activity.ActivityType == ActivityType.Streaming && e.User.Id == womp.Id)
            {
                await StreamAnnouncement(s);
            }
            if (e.Activity.ActivityType == ActivityType.Streaming)
            {
                e.Activity.ActivityType = ActivityType.Custom;
                await _memberUser.GrantRoleAsync(_streamerrole);

                await _memberUser.GrantRoleAsync(_liverole);
            }
            else
            {
                await _memberUser.RevokeRoleAsync(_liverole);
            }
        }
示例#4
0
        public static async Task PresenceUpdated(PresenceUpdateEventArgs e, DiscordClient client, Dictionary <DiscordMember, DateTime> gameStartedDictionary)
        {
            if (Komobase.IsSubscribed(e.Member.Username))
            {
                //if just started playing
                if (e.Game != null && e.Game.Name != null && !gameStartedDictionary.ContainsKey(e.Member) && (e.PresenceBefore.Game == null || e.PresenceBefore.Game.Name == string.Empty))
                {
                    gameStartedDictionary.Add(e.Member, DateTime.Now);
                }
                //if ended
                else if (e.Game == null || e.Game.Name == null || e.Game.Name == string.Empty)
                {
                    if (gameStartedDictionary.ContainsKey(e.Member))
                    {
                        DiscordDmChannel dm = await client.CreateDmAsync(e.Member);

                        await client.SendMessageAsync(dm, "No! Ennyit függtél most: " +
                                                      GetTimeLapsedString(DateTime.Now, gameStartedDictionary[e.Member]),
                                                      false, null);

                        gameStartedDictionary.Remove(e.Member);
                    }
                }
            }
        }
示例#5
0
        private static async Task Discord_PresenceUpdated(PresenceUpdateEventArgs e)
        {
#if DEBUG
            var ch = await DiscordClient.GetDefaultChannelAsync();

            await ch.SendMessageAsync("PresenceUpdated");
#endif
        }
        private async Task Notify(DiscordClient sender, PresenceUpdateEventArgs e)
        {
            if (_notifyChannel == null)
            {
                return;
            }
            var member = await DefaultGuild.GetMemberAsync(e.User.Id);

            if (member == null || !member.Roles.Any((role) => role.Id == streamerRoleId))
            {
                return;
            }

            var    pres         = e.UserAfter.Presence;
            var    actTypeAfter = pres.Activity.ActivityType;
            string content;

            StreamerInfo info;
            bool         isInList = streamersInfo.TryGetValue(member.Id, out info);

            if (actTypeAfter == ActivityType.Streaming && !_currentlyStreaming.Contains(member.Id)) //If start streaming
            {
                _currentlyStreaming.Add(member.Id);
                content = isInList && !string.IsNullOrEmpty(info.StartPhrase) ? info.StartPhrase : defaultStartPhrase;
                var imageUrl = isInList && !string.IsNullOrEmpty(info.ImageUrl) ? info.ImageUrl : defaultImageUrl;

                var actInfo = pres.Activity.RichPresence;
                content = content.Replace("name", $"**{member.Username}**", StringComparison.OrdinalIgnoreCase);
                content = content.Replace("game", $"**{actInfo.State}**", StringComparison.OrdinalIgnoreCase);

                var embedBuilder = new DiscordEmbedBuilder();
                embedBuilder.SetAuthor(member);
                embedBuilder.SetTitle(actInfo.Details);
                embedBuilder.AddField("Игра", actInfo.State);
                embedBuilder.AddField("Ссылка", pres.Activity.StreamUrl);

                try
                {
                    embedBuilder.WithImageUrl(imageUrl);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Не удалось установить картинку для пользователя " + member.Username + " Причина: " + ex.Message);
                }


                await _notifyChannel.SendMessageAsync(content, embed : embedBuilder.Build());
            }
            else if (actTypeAfter != ActivityType.Streaming && _currentlyStreaming.Contains(member.Id)) // If end streaming
            {
                _currentlyStreaming.Remove(member.Id);
                content = isInList && !string.IsNullOrEmpty(info.EndPhrase) ? info.EndPhrase : defaultEndPhrase;

                content = content.Replace("name", $"**{member.Username}**");
                await _notifyChannel.SendMessageAsync(content);
            }
        }
示例#7
0
        public static async Task PresenceUpdated(ModCoreShard bot, PresenceUpdateEventArgs e)
        {
            // TODO fix me
            var db      = bot.SharedData.ModCore.CreateGlobalContext();
            var loggers = db.GuildConfig.Where(x => x.GetSettings().LogUpdates).Select(x => x.GuildId);

            var guilds = bot?.Parent?.Shards?.SelectMany(x => x.Client?.Guilds?.Where(y => y.Value.GetGuildSettings(db)?.LogUpdates ?? false));

            if (guilds != null)
            {
                foreach (var g in guilds.Select(x => x.Value))
                {
                    if (await IsInGuild(e.UserAfter, g))
                    {
                        var gst = g.GetGuildSettings(db);
                        var log = g.GetChannel(gst.UpdateChannel);

                        var embed = new DiscordEmbedBuilder()
                                    .WithTitle("User Updated:")
                                    .WithDescription($"{e.UserAfter.Username}#{e.UserAfter.Discriminator}");

                        if (e.UserAfter.Username != e.UserBefore.Username)
                        {
                            embed.AddField("Changed username", $"{e.UserBefore.Username} to {e.UserAfter.Username}");
                        }

                        if (e.UserAfter.Discriminator != e.UserBefore.Discriminator)
                        {
                            embed.AddField("Changed discriminator", $"{e.UserBefore.Discriminator} to {e.UserAfter.Discriminator}");
                        }

                        if (e.UserAfter.AvatarUrl != e.UserBefore.AvatarUrl)
                        {
                            embed.AddField("Changed avatar", $"[Old Avatar]({e.UserBefore.AvatarUrl})" +
                                           $"\nNote: this link may 404 later due to cache invalidation");
                        }

                        if (e.UserAfter.IsBot != e.UserBefore.IsBot)
                        {
                            embed.AddField("Magically transformed between bot form and human form",
                                           $"Wait, what the f**k this isn't possible");
                        }

                        // TODO ModCore color scheme
                        embed.WithColor(new DiscordColor("#089FDF"));

                        embed.WithThumbnail(e.UserAfter.AvatarUrl);
                        if (embed.Fields.Count > 0)
                        {
                            await log.SendMessageAsync(embed : embed);
                        }
                    }
                }
            }
        }
        public static Task PresenceUpdated(PresenceUpdateEventArgs e)
        {
            if (PresenceUpdatedBool)
            {
                if (!e.Member.IsBot && e.Member != e.Client.CurrentUser)
                {
                    if (PUlastUserId != e.Member.Id)
                    {
                        PUlastUserId     = e.Member.Id;
                        PUlastUserStatus = e.Member.Presence.Status;
                    }
                    else if (PUlastUserStatus != e.Member.Presence.Status)
                    {
                        PUlastUserId     = e.Member.Id;
                        PUlastUserStatus = e.Member.Presence.Status;
                    }
                    else
                    {
                        return(Task.CompletedTask); // try to prevent multiple guild update
                    }
                    Console.ForegroundColor = ConsoleColor.DarkYellow;
                    Logger.Write($"[Updated] ");
                    Console.ForegroundColor = ConsoleColor.White;
                    Logger.Write($"[Status] ");
                    Console.ForegroundColor = ConsoleColor.Green;
                    Logger.Write($"[{DateTime.Now}] ");
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Logger.Write($"{e.Member.Username}#{e.Member.Discriminator} ({e.Member.Id}) | ");
                    switch (e.Member.Presence.Status)
                    {
                    case UserStatus.Online:
                        Console.ForegroundColor = ConsoleColor.Green;
                        Logger.WriteLine($"{e.Status}");
                        break;

                    case UserStatus.DoNotDisturb:
                        Console.ForegroundColor = ConsoleColor.Red;
                        Logger.WriteLine($"{e.Status}");
                        break;

                    case UserStatus.Idle:
                        Console.ForegroundColor = ConsoleColor.DarkYellow;
                        Logger.WriteLine($"{e.Status}");
                        break;

                    case UserStatus.Offline:
                        Console.ForegroundColor = ConsoleColor.Gray;
                        Logger.WriteLine($"{e.Status}");
                        break;
                    }
                }
            }
            return(Task.CompletedTask);
        }
示例#9
0
        private async Task Client_PresenceUpdated(PresenceUpdateEventArgs e)
        {
            try
            {
                if (!cfgJson.ServerId.Contains(e.Guild.Id) || e.Game == null)
                {
                    return;
                }
                using (var db = new LiteDatabase($"filename={cfgJson.ServerId.FirstOrDefault(x => x == e.Guild.Id)}.db; journal=false;"))
                {
                    var dbUsers = db.GetCollection <UserModel>("Users");
                    var dbUser  = dbUsers.FindOne(x => x.Id == e.Member.Id);
                    if (dbUser == null)
                    {
                        var userModel = new UserModel
                        {
                            Id          = e.Member.Id,
                            rrIsEnabled = true
                        };
                        dbUsers.Insert(userModel);
                        dbUser = dbUsers.FindOne(x => x.Id == e.Member.Id);
                    }
                    if (!dbUser.rrIsEnabled)
                    {
                        return;
                    }
                }
                var userRoles = e.Roles.ToList();
                var userGame  = e.Game.Name.ToLower();
                foreach (var game in cfgJson.GamesDictionary)
                {
                    if (userRoles.Exists(x => x.Name == game.Key))
                    {
                        continue;
                    }
                    if (game.Value.Exists(x => userGame.Contains(x)))
                    {
                        var nonGrantedRole = targetRoles[e.Guild.Id].Find(x => x.Name == game.Key);
                        if (nonGrantedRole != null)
                        {
                            await e.Member.GrantRoleAsync(nonGrantedRole);

                            e.Client.DebugLogger.LogMessage(LogLevel.Info, "002", $"Пользователь {e.Member.Username} получил роль {nonGrantedRole.Name}", DateTime.Now);
                        }
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                e.Client.DebugLogger.LogMessage(LogLevel.Error, "002", $"Exception occured: {ex.GetType()}: {ex.Message}", DateTime.Now);
            }
            return;
        }
示例#10
0
        private Task Discord_PresenceUpdated(PresenceUpdateEventArgs e)
        {
            if (e.User != null && e.PresenceBefore?.Status != e.Status)
            {
                if (App.Discord.Relationships.TryGetValue(e.User.Id, out var rel) && rel?.RelationshipType == DiscordRelationshipType.Friend)
                {
                    SortRelationship(rel, true);
                }
            }

            return(Task.CompletedTask);
        }
示例#11
0
        private static async Task Discord_PresenceUpdated(DiscordClient sender, PresenceUpdateEventArgs e)
        {
            if (e.User.Id == ToStalk)
            {
                var guild = await sender.GetGuildAsync(750409700750786632);

                for (var i = 0; i < 3; i++)
                {
                    await guild.GetChannel(770439341620330497).SendMessageAsync(
                        $"{e.User.Username}'s activity has changed! ({e.PresenceBefore.Status} => {e.PresenceAfter.Status})");
                }
                ToStalk = 0;
            }
        }
示例#12
0
        private static void HeatherReaction(PresenceUpdateEventArgs e)
        {
            var random = new Random();

            if (random.Next(5) == 1)
            {
                if (e.User.Id == DiscordIDs.Hangry)
                {
                    if (!e.PresenceBefore.IsOnline() && e.PresenceAfter.IsOnline())
                    {
                        e.PresenceAfter.Guild.GetDefaultChannel().SendMessageAsync("Wait, is that a Hangry... Walrus??");
                    }
                }
            }
        }
        private async Task OnPresenceUpdated(DiscordClient sender, PresenceUpdateEventArgs e)
        {
            var voiceChannel = await FindVoiceChannelAsync(e.User);

            if (voiceChannel is null)
            {
                return;
            }

            if (e.PresenceBefore.Activities.Count == e.PresenceAfter.Activities.Count)
            {
                return;
            }

            await _autoVoiceService.UpdateNameAsync(voiceChannel);
        }
示例#14
0
        private Task Discord_PresenceUpdate(PresenceUpdateEventArgs e)
        {
            var user = RPClass.StatusList.FirstOrDefault(x => x.UserID == e.User.Id);

            if (user == null)
            {
                RPClass.StatusList.Add(new StatusObject.RootObject(e.User.Id));
                user = RPClass.StatusList.Last();
            }
            if (e.PresenceAfter != null)
            {
                user.AddStatus(DateTime.Now, e.PresenceAfter.Status);
                RPClass.SaveData(7);
            }

            return(Task.Delay(0));
        }
示例#15
0
        private void GameplayStopEvent(PresenceUpdateEventArgs presenceUpdate)
        {
            Console.WriteLine($"Game Stopped: {presenceUpdate.PresenceBefore.Game.Name} by {presenceUpdate.Member.DisplayName}");
            var a = new {
                UserId        = presenceUpdate.Member.Id,
                GuildId       = presenceUpdate.Guild.Id,
                Status        = "GameStart",
                Timestamp_UTC = DateTime.UtcNow,
                Game          = new PublicDiscordGame {
                    Id   = presenceUpdate.PresenceBefore.Game.ApplicationId,
                    Name = presenceUpdate.PresenceBefore.Game.Name,
                    Hash = StaticHelpers.GameNameToHash(presenceUpdate.PresenceBefore.Game.Name)
                }
            };

            Console.WriteLine(JsonConvert.SerializeObject(a, Formatting.Indented));
        }
示例#16
0
        private Task ManageNowStreamingUsers(DiscordClient dClient, PresenceUpdateEventArgs args)
        {
            Task.Run(async() =>
            {
                // Ignore non-SBG events
                if (args.PresenceAfter.Guild.Id != Variables.Guilds.SBG)
                {
                    return;
                }

                DiscordRole streaming  = args.PresenceAfter.Guild.GetRole(SBGRoles.NowStreaming);
                DiscordMember member   = await args.PresenceAfter.Guild.GetMemberAsync(args.UserAfter.Id);
                bool wasStreaming      = args.PresenceBefore?.Activities.Any(a => a.StreamUrl != null) ?? false;
                DiscordActivity stream = args.PresenceAfter.Activities.Where(a => a.StreamUrl != null).FirstOrDefault();

                // User Started Streaming Intruder
                if (!wasStreaming && stream != null)
                {
                    SearchStreams search = await this.twitchAPI.V5.Search.SearchStreamsAsync(stream.StreamUrl.Replace("https://www.twitch.tv/", string.Empty, StringComparison.Ordinal));

                    foreach (Stream searchStream in search.Streams)
                    {
                        if (searchStream.Game == "Intruder")
                        {
                            await this.activityManager.SetStreamAsync(args.UserAfter.Id, searchStream.Channel.Name.Capitalize(), searchStream.Channel.Url);
                            await member.GrantRoleAsync(streaming);
                            break;
                        }
                    }
                }

                // User Stopped Streaming Intruder
                else if (wasStreaming && stream == null && member.Roles.Contains(streaming))
                {
                    if (this.activityManager.IsStreamOwner(args.UserAfter.Id))
                    {
                        await this.activityManager.ClearStreamAsync();
                    }

                    await member.RevokeRoleAsync(streaming);
                }
            });

            return(Task.CompletedTask);
        }
示例#17
0
        private Task ManageNowPlayingAsync(DiscordClient dClient, PresenceUpdateEventArgs args)
        {
            _ = Task.Run(async() =>
            {
                // Ignore non-SBG events
                if (args.PresenceAfter.Guild.Id != Variables.Guilds.SBG)
                {
                    return;
                }

                bool wasPlaying = args.PresenceBefore?.Activities.Any(a => a.Name == "Intruder") ?? false;
                bool nowPlaying = args.PresenceAfter.Activities.Any(a => a.Name == "Intruder");

                if ((!wasPlaying && !nowPlaying) || (wasPlaying && nowPlaying))
                {
                    return;
                }

                DiscordRole nowPlayingRole = args.PresenceAfter.Guild.GetRole(SBGRoles.NowPlaying);
                DiscordMember member       = await args.PresenceAfter.Guild.GetMemberAsync(args.UserAfter.Id);

                // User started playing Intruder
                if (!wasPlaying && nowPlaying)
                {
                    await member.GrantRoleAsync(nowPlayingRole);
                    using IServiceScope scope = this.scopeFactory.CreateScope();
                    using BloonContext db     = scope.ServiceProvider.GetRequiredService <BloonContext>();
                    LTPJoin join = db.LTPJoins.Where(l => l.UserId == args.UserAfter.Id).FirstOrDefault();

                    if (join != null)
                    {
                        join.Timestamp = DateTime.UtcNow;
                        await db.SaveChangesAsync();
                    }
                }

                // User stopped playing Intruder
                else if (wasPlaying && (!nowPlaying || args.PresenceAfter.Status == UserStatus.Invisible || args.PresenceAfter.Status == UserStatus.Offline))
                {
                    await member.RevokeRoleAsync(nowPlayingRole);
                }
            });

            return(Task.CompletedTask);
        }
示例#18
0
        private void GenericPresenceChangeEvent(PresenceUpdateEventArgs presenceUpdate)
        {
            var presenceEvent = new PublicPresenceEvent {
                User = new PublicDiscordUser {
                    Id            = presenceUpdate.Member.Id,
                    Discriminator = int.Parse(presenceUpdate.Member.Discriminator),
                    //GuildId = presenceUpdate.Member.Guild.Id,
                    Username = presenceUpdate.Member.Username
                },
                Time_UTC      = DateTime.UtcNow,
                PreviousState = presenceUpdate.PresenceBefore != null
                    ? presenceUpdate.PresenceBefore.Status.ToString().ToLower() // To lower because the below Status gets the string value of the enum. Why doesn't PresenceBefore do the same? Yes.
                    : "unknown",
                NewState = presenceUpdate.Status
            };

            Console.WriteLine($"Presence change event for a registered user, {presenceUpdate.Member.DisplayName} in {presenceUpdate.Guild.Name} was {presenceEvent.PreviousState} now {presenceEvent.NewState}");
        }
        public static async Task PresenceUpdated(PresenceUpdateEventArgs e, DiscordClient client)
        {
            if (!e.Member.IsBot)
            {
                try
                {
                    using (KomoBaseAccess kba = new KomoBaseAccess())
                    {
                        bool subStatus = kba.SubStatus(e.Member.Username);

                        bool   isStopped = (e.Game == null || e.Game.Name == null || e.Game.Name == string.Empty) && gameStartedDictionary.ContainsKey(e.Member);
                        int    points    = 0;
                        string msg       = string.Empty;
                        //add points
                        if (isStopped)
                        {
                            msg = GetTimeLapsedString(DateTime.Now, gameStartedDictionary[e.Member], out points);
                            kba.AddPoints(e.Member.Username, points);
                        }
                        //if just started playing
                        if (e.Game != null && e.Game.Name != null && !gameStartedDictionary.ContainsKey(e.Member) && (e.PresenceBefore.Game == null || e.PresenceBefore.Game.Name == string.Empty))
                        {
                            gameStartedDictionary.Add(e.Member, DateTime.Now);
                        }
                        //if ended
                        else if (isStopped)
                        {
                            gameStartedDictionary.Remove(e.Member);
                        }

                        if (subStatus == true && isStopped)
                        {
                            DiscordDmChannel dm = await client.CreateDmAsync(e.Member);

                            await client.SendMessageAsync(dm, "No! Ennyit függtél most: " +
                                                          msg,
                                                          false, null);
                        }
                    }
                }
                catch (Exception ex) { logger.Error(DateTime.UtcNow.ToString() + ": " + ex.Message); }
            }
        }
示例#20
0
 private async Task _discordClient_PresenceUpdated(PresenceUpdateEventArgs e)
 {
     try {
         if (e.PresenceBefore?.Game == null && e.Game == null)
         {
             GenericPresenceChangeEvent(e);
         }
         else if (e.PresenceBefore.Game != null && e.Game == null)
         {
             GameplayStopEvent(e);
         }
         else if (e.PresenceBefore.Game == null && e.Game != null)
         {
             GameplayStartEvent(e);
         }
         await Task.Run(() => { });
     } catch (Exception ee) {
         throw;
     }
 }
示例#21
0
        private static async Task WingerdSistersReaction(PresenceUpdateEventArgs e)
        {
            var wingerdSisters = new List <ulong>()
            {
                DiscordIDs.Scrub, DiscordIDs.Rachael, DiscordIDs.Rebekah
            };

            if (wingerdSisters.Contains(e.User.Id))
            {
                var guildMembers = await e.PresenceAfter.Guild.GetAllMembersAsync();

                var onlineMembers = guildMembers.Where(x => x.Presence.IsOnline() || x.Presence.Status == UserStatus.Idle).Select(x => x.Id);

                var allSistersOnline = wingerdSisters.All(onlineMembers.Contains);

                if (allSistersOnline)
                {
                    await e.PresenceAfter.Guild.GetDefaultChannel().SendMessageAsync("Woah! It's all the Wingerd sisters in one place!");
                }
            }
        }
示例#22
0
        private Task Client_PresenceUpdated(PresenceUpdateEventArgs e)
        {
            if (e.PresenceAfter.Activity.ActivityType == ActivityType.Playing && !string.IsNullOrWhiteSpace(e.PresenceAfter.Activity.Name))
            {
                //playing a game
            }
            else if (e.PresenceAfter.Activity.ActivityType == ActivityType.ListeningTo)
            {
                Client.DebugLogger.Info(string.Format("{0} is now listening to {1} by {2}", e.User.Username, e.PresenceAfter.Activity.RichPresence.Details, e.PresenceAfter.Activity.RichPresence.State));
                //listening to a song
            }
            else if (e.PresenceAfter.Status == UserStatus.Online && e.PresenceBefore.Status == UserStatus.Offline)
            {
                Client.DebugLogger.Info(string.Format("{0} is now online", e.User.Username));
            }
            else if (e.PresenceAfter.Status == UserStatus.Offline && e.PresenceBefore.Status == UserStatus.Online)
            {
                Client.DebugLogger.Info(string.Format("{0} is now offline", e.User.Username));
            }

            return(Task.CompletedTask);
        }
示例#23
0
        }//end MainAsync

        private async Task Client_PresenceUpdated(PresenceUpdateEventArgs e)
        {
            ulong channel = 0;

            if (e.Member.Presence.Game != null)
            {
                if (e.Member.Presence.Game.StreamType == GameStreamType.Twitch)
                {
                    {
                        //Stream detected! Search if channel is recorded
                        var guild    = e.Guild.Id.ToString();
                        var jsonData = File.ReadAllText("streamchannel.json");


                        dynamic sc = JsonConvert.DeserializeObject(jsonData);


                        bool found = false;
                        int  c     = sc.SChannel.Count;
                        for (int counter = 0; counter < c; counter++)
                        {
                            if (sc.SChannel[counter].guildID == guild)
                            {
                                found   = true;
                                channel = Convert.ToUInt64(sc.SChannel[counter].channelID.ToString());
                            }
                        } // end for
                        if (found == true)
                        {
                            await e.Guild.GetChannel(channel).SendMessageAsync($"@everyone, {e.Member.DisplayName} is now streaming! Why don't you come over and watch?\n\nLink: {e.Member.Presence.Game.Url}");
                        }
                    }
                }
            }

            await Task.CompletedTask;
        }
示例#24
0
 private Task Discord_PresenceUpdated(DiscordClient client, PresenceUpdateEventArgs e)
 {
     client.Logger.LogInformation(TestBotEventId, "Presence updated: '{0}'", e.Activity.Name);
     return(Task.CompletedTask);
 }
示例#25
0
 public static async Task Stream_Notification(object Client, PresenceUpdateEventArgs e)
 {
     _ = Task.Run(async() =>
     {
         if (e.User != null)
         {
             DiscordGuild guild = e.User.Presence.Guild;
             DB.StreamNotifications StreamNotification = DB.DBLists.StreamNotifications.FirstOrDefault(w => w.Server_ID == guild.Id);
             DiscordChannel channel = guild.GetChannel(Convert.ToUInt64(StreamNotification.Channel_ID));
             if (Program.ServerIdList.Contains(guild.Id))
             {
                 LiveStreamer streamer = new()
                 {
                     User  = e.User,
                     Time  = DateTime.Now,
                     Guild = guild
                 };
                 int ItemIndex;
                 try
                 {
                     ItemIndex = LiveStreamerList.FindIndex(a => a.User.Id == e.User.Id &&
                                                            a.Guild.Id == e.User.Presence.Guild.Id);
                 }
                 catch (Exception)
                 {
                     ItemIndex = -1;
                 }
                 if (ItemIndex >= 0 &&
                     e.User.Presence.Activities.FirstOrDefault(w => w.Name.ToLower() == "twitch" || w.Name.ToLower() == "youtube") == null)
                 {
                     //removes user from list
                     if (LiveStreamerList[ItemIndex].Time.AddHours(StreamCheckDelay) < DateTime.Now &&
                         e.User.Presence.Activities.FirstOrDefault(w => w.Name.ToLower() == "twitch" || w.Name.ToLower() == "youtube") == LiveStreamerList[ItemIndex].User.Presence.Activities.FirstOrDefault(w => w.Name.ToLower() == "twitch" || w.Name.ToLower() == "youtube"))
                     {
                         LiveStreamerList.RemoveAt(ItemIndex);
                     }
                 }
                 else if (ItemIndex == -1 &&
                          e.User.Presence.Activities.FirstOrDefault(w => w.Name.ToLower() == "twitch" || w.Name.ToLower() == "youtube") != null &&
                          e.User.Presence.Activities.FirstOrDefault(w => w.Name.ToLower() == "twitch" || w.Name.ToLower() == "youtube").ActivityType.Equals(ActivityType.Streaming))
                 {
                     DiscordMember StreamMember = await guild.GetMemberAsync(e.User.Id);
                     bool role          = false, game = false;
                     string gameTitle   = e.User.Presence.Activities.FirstOrDefault(w => w.Name.ToLower() == "twitch" || w.Name.ToLower() == "youtube").RichPresence.State;
                     string streamTitle = e.User.Presence.Activities.FirstOrDefault(w => w.Name.ToLower() == "twitch" || w.Name.ToLower() == "youtube").RichPresence.Details;
                     string streamURL   = e.User.Presence.Activities.FirstOrDefault(w => w.Name.ToLower() == "twitch" || w.Name.ToLower() == "youtube").StreamUrl;
                     if (StreamNotification.Roles_ID != null)
                     {
                         foreach (DiscordRole urole in StreamMember.Roles)
                         {
                             foreach (decimal roleid in StreamNotification.Roles_ID)
                             {
                                 if (urole.Id == roleid)
                                 {
                                     role = true;
                                     break;
                                 }
                             }
                         }
                     }
                     else if (StreamNotification.Roles_ID == null)
                     {
                         role = true;
                     }
                     if (StreamNotification.Games != null)
                     {
                         foreach (string ugame in StreamNotification.Games)
                         {
                             try
                             {
                                 if (gameTitle == ugame)
                                 {
                                     game = true;
                                     break;
                                 }
                             }
                             catch { game = false; }
                         }
                     }
                     else if (StreamNotification.Games == null)
                     {
                         game = true;
                     }
                     if (game && role)
                     {
                         DiscordEmbedBuilder embed = new()
                         {
                             Color  = new DiscordColor(0x6441A5),
                             Author = new DiscordEmbedBuilder.EmbedAuthor
                             {
                                 IconUrl = e.User.AvatarUrl,
                                 Name    = "STREAM",
                                 Url     = streamURL
                             },
                             Description = $"**Streamer:**\n {e.User.Mention}\n\n" +
                                           $"**Game:**\n{gameTitle}\n\n" +
                                           $"**Stream title:**\n{streamTitle}\n\n" +
                                           $"**Stream Link:**\n{streamURL}",
                             Thumbnail = new DiscordEmbedBuilder.EmbedThumbnail
                             {
                                 Url = e.User.AvatarUrl
                             },
                             Title = $"Check out {e.User.Username} is now Streaming!"
                         };
                         await channel.SendMessageAsync(embed: embed);
                         //adds user to list
                         LiveStreamerList.Add(streamer);
                     }
                 }
             }
         }
     });
     await Task.Delay(1);
 }
示例#26
0
文件: RPBot.cs 项目: jcryer/RPBot
 private Task Discord_PresenceUpdate(PresenceUpdateEventArgs e)
 {
     return(Task.Delay(0));
 }
示例#27
0
        private async Task UserPresenceUpdated(DiscordClient client, PresenceUpdateEventArgs e)
        {
            bool streamStatusChanged = false;
            bool startedStreaming    = false;
            var  activitiesBefore    = e.PresenceBefore?.Activities;
            var  activitiesAfter     = e.PresenceAfter?.Activities;

            //check if status changed
            if (activitiesBefore?.FirstOrDefault(activity =>
                                                 activity.ActivityType == ActivityType.Streaming) != null)
            {
                if (activitiesAfter?.FirstOrDefault(activity =>
                                                    activity.ActivityType == ActivityType.Streaming) == null)
                {
                    streamStatusChanged = true;
                }
            }
            else if (activitiesAfter?.FirstOrDefault(activity =>
                                                     activity.ActivityType == ActivityType.Streaming) != null)
            {
                if (activitiesBefore?.FirstOrDefault(activity =>
                                                     activity.ActivityType == ActivityType.Streaming) == null)
                {
                    streamStatusChanged = true;
                    startedStreaming    = true;
                }
            }

            if (!streamStatusChanged)
            {
                return;
            }

            //get all configured guilds
            var filteredGuilds = ShimakazeBot.Client.Guilds.Where(guild => {
                return(ShimakazeBot.StreamingEnabledGuilds.ContainsKey(guild.Value.Id) ||
                       guild.Value.Roles.FirstOrDefault(role =>
                                                        role.Value.Name == "Now Streaming"
                                                        ).Value != null);
            });

            //filter ones for member and check perms
            string missingPerms = "";

            filteredGuilds = filteredGuilds.Where(guild =>
            {
                if (guild.Value.Members.ContainsKey(e.User.Id))
                {
                    if (Utils.MemberHasPermissions(
                            guild.Value.Members[ShimakazeBot.Client.CurrentUser.Id],
                            Permissions.ManageRoles))
                    {
                        return(true);
                    }
                    else
                    {
                        missingPerms += $"{guild.Value.Name} (**{guild.Value.Id}**) - ";
                    }
                }
                return(false);
            });
            if (missingPerms.Length > 0)
            {
                ShimakazeBot.SendToDebugRoom("Shima is missing manage role perms for streaming in:" +
                                             $"\n{missingPerms}");
                return;
            }

            //apply per guild
            foreach (var guild in filteredGuilds)
            {
                var role = ShimakazeBot.StreamingEnabledGuilds.ContainsKey(guild.Key) ?
                           guild.Value.Roles[ShimakazeBot.StreamingEnabledGuilds[guild.Key]] :
                           guild.Value.Roles.FirstOrDefault(guildRole =>
                                                            guildRole.Value.Name == "Now Streaming"
                                                            ).Value;
                try
                {
                    if (startedStreaming)
                    {
                        await guild.Value.Members[e.User.Id].GrantRoleAsync(role);
                    }
                    else
                    {
                        await guild.Value.Members[e.User.Id].RevokeRoleAsync(role);
                    }
                }
                //if role is too high
                catch
                {
                    ShimakazeBot.SendToDebugRoom($"Shima couldn't reach the streaming role {role.Name} " +
                                                 $"in {guild.Value.Name} (**{guild.Value.Id}**)");
                }
            }
        }
示例#28
0
文件: Bot.cs 项目: NickMercer/RUINBot
 private Task OnPresenceUpdated(DiscordClient sender, PresenceUpdateEventArgs e)
 {
     PresenceReactions.ReactToPresenceChanges(e);
     return(Task.CompletedTask);
 }
示例#29
0
 private Task Client_PresenceUpdated(PresenceUpdateEventArgs e)
 {
     e.Client.DebugLogger.LogMessage(LogLevel.Info, "BotApp", e.ToString(), DateTime.Now);
     return(Task.CompletedTask);
 }
示例#30
0
 internal static async void ReactToPresenceChanges(PresenceUpdateEventArgs e)
 {
     HeatherReaction(e);
     await WingerdSistersReaction(e);
 }