private bool MemberRemove_Loaded(ChatType chatType, ChatMemberStatus status, ChatMember member)
        {
            if (member.Status is ChatMemberStatusCreator || member.Status is ChatMemberStatusAdministrator admin && !admin.CanBeEdited)
            {
                return(false);
            }

            if (member.UserId == ViewModel.CacheService.Options.MyId)
            {
                return(false);
            }

            if (chatType is ChatTypeBasicGroup && status is ChatMemberStatusAdministrator)
            {
                return(member.InviterUserId == ViewModel.CacheService.Options.MyId);
            }

            return(status is ChatMemberStatusCreator || status is ChatMemberStatusAdministrator administrator && administrator.CanRestrictMembers);
        }
        private bool MemberRestrict_Loaded(ChatType chatType, ChatMemberStatus status, ChatMember member)
        {
            if (member.Status is ChatMemberStatusCreator || member.Status is ChatMemberStatusRestricted || member.Status is ChatMemberStatusAdministrator admin && !admin.CanBeEdited)
            {
                return(false);
            }

            if (member.UserId == ViewModel.CacheService.Options.MyId)
            {
                return(false);
            }

            if (chatType is ChatTypeSupergroup supergroup && supergroup.IsChannel)
            {
                return(false);
            }

            return(status is ChatMemberStatusCreator || status is ChatMemberStatusAdministrator administrator && administrator.CanRestrictMembers);
        }
Beispiel #3
0
        public async Task CreateChatMemberAsync(Guid chatId, Guid memberId, ChatMemberStatus status = ChatMemberStatus.Pending, string publicKey = null)
        {
            try
            {
                var member = new ChatMember()
                {
                    UserId    = memberId,
                    ChatId    = chatId,
                    Status    = status,
                    PublicKey = publicKey
                };

                await _dbContext.ChatMembers.AddAsync(member);

                await _dbContext.SaveChangesAsync();
            }
            catch (DbUpdateException ex)
            {
                throw new SlothException("Creating chat member failed", ex);
            }
        }
Beispiel #4
0
        public static void Start(Update u, string[] args)
        {
            if (u.Message.Chat.Type == ChatType.Private && u.Message.From != null)
            {
                using (var db = new WWContext())
                {
                    var p = GetDBPlayer(u.Message.From.Id, db);
                    if (p == null)
                    {
                        var usr = u.Message.From;
                        p = new Player
                        {
                            UserName   = usr.Username,
                            Name       = (usr.FirstName + " " + usr.LastName).Trim(),
                            TelegramId = usr.Id,
                            Language   = "English"
                        };
                        db.Players.Add(p);
                        db.SaveChanges();
                        p = GetDBPlayer(u.Message.From.Id, db);
                    }
#if RELEASE
                    p.HasPM = true;
#elif RELEASE2
                    p.HasPM2 = true;
#elif BETA
                    p.HasDebugPM = true;
#endif
                    db.SaveChanges();

                    if (String.IsNullOrEmpty(args[1]))
                    {
                        var msg = $"Hi there! I'm @{Bot.Me.Username}, and I moderate games of Werewolf." +
                                  $"\nJoin the main group @werewolfgame, or to find a group to play in, you can use /grouplist." +
                                  $"\nFor role information, use /rolelist." +
                                  $"\nIf you want to set your default language, use /setlang." +
                                  $"\nBe sure to stop by <a href=\"https://telegram.me/werewolfsupport\">Werewolf Support</a> for any questions, and subscribe to @werewolfdev for updates from the developer." +
                                  $"\nMore infomation can be found <a href=\"https://www.tgwerewolf.com/?referrer=start\">here</a>!";
                        Bot.Send(msg, u.Message.Chat.Id);
                        return;
                    }

                    if (args[1] == "donatetg")
                    {
                        GetDonationInfo(m: u.Message);
                        return;
                    }

                    //okay, they are joining a game.
                    string           nodeid = "";
                    string           gameid = "";
                    Models.Node      node   = null;
                    Models.GameInfo  game   = null;
                    ChatMemberStatus status = ChatMemberStatus.Creator;
                    try
                    {
                        nodeid = args[1].Substring(0, 32);
                        gameid = args[1].Substring(32);

                        //try to get the guid of the game they want to join
                        Guid g, n;
                        if (!(Guid.TryParse(nodeid, out n) && Guid.TryParse(gameid, out g)))
                        {
                            return;
                        }

                        //first get the node where to search for the game

                        for (var i = 0; i < 3; i++)
                        {
                            node = Bot.Nodes.ToList().FirstOrDefault(x => x.ClientId == n);
                            if (node != null)
                            {
                                break;
                            }
                        }
                        if (node == null)
                        {
                            //log it
                            //Bot.Send($"{u.Message.From.Id} (@{u.Message.From.Username ?? ""}) didn't find node with guid {n.ToString()} while attempting to play in {g.ToString()}", -1001098399855);
                            return;
                        }

                        //we have the node, get the game

                        for (var i = 0; i < 5; i++)
                        {
                            game = node.Games.ToList().FirstOrDefault(x => x.Guid == g);
                            if (game != null)
                            {
                                break;
                            }
                        }
                        if (game == null)
                        {
                            //log it
                            //Bot.Send($"{u.Message.From.Id} (@{u.Message.From.Username ?? ""}) found node with guid {n.ToString()} but not the game {g.ToString()}", -1001098399855);
                            return;
                        }

                        //ok we got the game, now join
                        //make sure they are member
                        status = Bot.Api.GetChatMemberAsync(game.GroupId, u.Message.From.Id).Result.Status;
                        if (status == ChatMemberStatus.Left || status == ChatMemberStatus.Kicked)
                        {
                            Bot.Send(
                                GetLocaleString("NotMember", GetLanguage(u.Message.From.Id), game.ChatGroup.ToBold()),
                                u.Message.Chat.Id);
                            return;
                        }

                        game.AddPlayer(u);
                        return;
                    }
                    catch (AggregateException e)
                    {
                        var ex = e.InnerExceptions[0];
                        while (ex.InnerException != null)
                        {
                            ex = ex.InnerException;
                        }

                        Send(ex.Message, u.Message.Chat.Id);
                        Send($"Error in START:\n" +
                             $"{u.Message.Text}\n" +
                             $"Node: {nodeid}\n" +
                             $"Game: {gameid}\n" +
                             $"Found Node: {node?.ClientId}\n" +
                             $"Found Game: {game?.Guid}\n" +
                             $"Chat Member Status: {status}\n" +
                             $"{ex.Message}\n{ex.StackTrace}",
                             Settings.ErrorGroup);
                    }
                    catch (Exception ex)
                    {
                        while (ex.InnerException != null)
                        {
                            ex = ex.InnerException;
                        }

                        Send(ex.Message, u.Message.Chat.Id);
                        Send($"Error in START:\n" +
                             $"{u.Message.Text}\n" +
                             $"Node: {nodeid}\n" +
                             $"Game: {gameid}\n" +
                             $"Found Node: {node?.ClientId}\n" +
                             $"Found Game: {game?.Guid}\n" +
                             $"Chat Member Status: {status}\n" +
                             $"{ex.Message}\n{ex.StackTrace}",
                             Settings.ErrorGroup);
                    }
                }
            }
        }
Beispiel #5
0
        private void CreateFlyoutItem(ref MenuFlyout flyout, Func <ChatMemberStatus, ChatMember, Visibility> visibility, ICommand command, ChatMemberStatus status, object parameter, string text)
        {
            var value = visibility(status, parameter as ChatMember);

            if (value == Visibility.Visible)
            {
                var flyoutItem = new MenuFlyoutItem();
                //flyoutItem.Loaded += (s, args) => flyoutItem.Visibility = visibility(parameter as TLMessageCommonBase);
                flyoutItem.Command          = command;
                flyoutItem.CommandParameter = parameter;
                flyoutItem.Text             = text;

                flyout.Items.Add(flyoutItem);
            }
        }
 internal void FillUserInfo(string FirstName, string LastName, string Username, ChatMemberStatus Status)
 {
     this.FirstName = FirstName;
     this.LastName  = LastName;
     this.Username  = Username;
     this.Status    = Status;
     Complete       = true;
 }