コード例 #1
0
ファイル: RoleFuns.cs プロジェクト: nobug9527/shikongdb_new
 public static void Start()
 {
     ti = new Timer((d) =>
     {
         AdminLog alog;
         queue.TryDequeue(out alog);
         if (alog == null)
         {
             return;
         }
         AdminLogHelper.WriteAdminLog(alog.username, alog.logmessage, alog.type);
     });
     ti.Change(0, 500);
 }
コード例 #2
0
            public override async Task <IList <TLMessageBase> > LoadDataAsync()
            {
                _viewModel.IsLoading = true;
                _hasMore             = false;

                var maxId = Count > 0 ? _minEventId : 0;

                var response = await _protoService.GetAdminLogAsync(_inputChannel, null, null, null, maxId, 0, 50);

                if (response.IsSucceeded)
                {
                    _viewModel.IsLoading = false;

                    var result = new List <TLMessageBase>();

                    foreach (var item in response.Result.Events)
                    {
                        _minEventId = Math.Min(_minEventId, item.Id);

                        if (item.Action is TLChannelAdminLogEventActionChangeTitle changeTitle)
                        {
                            result.Insert(0, GetServiceMessage(item));
                        }
                        else if (item.Action is TLChannelAdminLogEventActionChangeAbout changeAbout)
                        {
                            var message = new TLMessage();
                            //message.Id = item.Id;
                            message.FromId   = item.UserId;
                            message.ToId     = _channel.ToPeer();
                            message.Date     = item.Date;
                            message.Message  = changeAbout.NewValue;
                            message.HasMedia = true;

                            if (string.IsNullOrEmpty(changeAbout.PrevValue))
                            {
                                message.Media = new TLMessageMediaEmpty();
                            }
                            else
                            {
                                message.Media = new TLMessageMediaWebPage
                                {
                                    WebPage = new TLWebPage
                                    {
                                        SiteName       = Strings.Android.EventLogPreviousGroupDescription,
                                        Description    = changeAbout.PrevValue,
                                        HasSiteName    = true,
                                        HasDescription = true
                                    }
                                };
                            }

                            result.Insert(0, message);
                            result.Insert(0, GetServiceMessage(item));
                        }
                        else if (item.Action is TLChannelAdminLogEventActionChangeUsername changeUsername)
                        {
                            var message = new TLMessage();
                            //message.Id = item.Id;
                            message.FromId      = item.UserId;
                            message.ToId        = _channel.ToPeer();
                            message.Date        = item.Date;
                            message.Message     = string.IsNullOrEmpty(changeUsername.NewValue) ? string.Empty : MeUrlPrefixConverter.Convert(changeUsername.NewValue);
                            message.Entities    = new TLVector <TLMessageEntityBase>();
                            message.HasMedia    = true;
                            message.HasEntities = true;

                            message.Entities.Add(new TLMessageEntityUrl {
                                Offset = 0, Length = message.Message.Length
                            });

                            if (string.IsNullOrEmpty(changeUsername.PrevValue))
                            {
                                message.Media = new TLMessageMediaEmpty();
                            }
                            else
                            {
                                message.Media = new TLMessageMediaWebPage
                                {
                                    WebPage = new TLWebPage
                                    {
                                        SiteName       = Strings.Android.EventLogPreviousLink,
                                        Description    = MeUrlPrefixConverter.Convert(changeUsername.PrevValue),
                                        HasSiteName    = true,
                                        HasDescription = true
                                    }
                                };
                            }

                            result.Insert(0, message);
                            result.Insert(0, GetServiceMessage(item));
                        }
                        else if (item.Action is TLChannelAdminLogEventActionChangePhoto changePhoto)
                        {
                            result.Insert(0, GetServiceMessage(item));
                        }
                        else if (item.Action is TLChannelAdminLogEventActionToggleInvites toggleInvites)
                        {
                            result.Insert(0, GetServiceMessage(item));
                        }
                        else if (item.Action is TLChannelAdminLogEventActionToggleSignatures toggleSignatures)
                        {
                            result.Insert(0, GetServiceMessage(item));
                        }
                        else if (item.Action is TLChannelAdminLogEventActionTogglePreHistoryHidden togglePreHistoryHidden)
                        {
                            result.Insert(0, GetServiceMessage(item));
                        }
                        else if (item.Action is TLChannelAdminLogEventActionUpdatePinned updatePinned)
                        {
                            // Patch for view
                            if (updatePinned.Message is TLMessageCommonBase messageCommon)
                            {
                                messageCommon.ReplyToMsgId = null;
                                messageCommon.IsOut        = false;
                                messageCommon.IsPost       = false;
                            }

                            if (!(updatePinned.Message is TLMessageEmpty))
                            {
                                result.Insert(0, updatePinned.Message);
                            }

                            result.Insert(0, GetServiceMessage(item));
                        }
                        else if (item.Action is TLChannelAdminLogEventActionEditMessage editMessage)
                        {
                            // TODO: the actual message
                            if (editMessage.NewMessage is TLMessageCommonBase messageCommon)
                            {
                                messageCommon.ReplyToMsgId = editMessage.PrevMessage.Id;
                                messageCommon.IsOut        = false;
                                messageCommon.IsPost       = false;
                            }
                            if (editMessage.NewMessage is TLMessage message)
                            {
                                message.Reply       = editMessage.PrevMessage;
                                message.EditDate    = null;
                                message.HasEditDate = false;
                            }

                            result.Insert(0, editMessage.NewMessage);
                            result.Insert(0, GetServiceMessage(item));
                        }
                        else if (item.Action is TLChannelAdminLogEventActionDeleteMessage deleteMessage)
                        {
                            // Patch for view
                            if (deleteMessage.Message is TLMessageCommonBase messageCommon)
                            {
                                messageCommon.ReplyToMsgId = null;
                                messageCommon.IsOut        = false;
                                messageCommon.IsPost       = false;
                            }

                            result.Insert(0, deleteMessage.Message);
                            result.Insert(0, GetServiceMessage(item));
                        }
                        else if (item.Action is TLChannelAdminLogEventActionParticipantJoin participantJoin)
                        {
                            result.Insert(0, GetServiceMessage(item));
                        }
                        else if (item.Action is TLChannelAdminLogEventActionParticipantLeave participantLeave)
                        {
                            result.Insert(0, GetServiceMessage(item));
                        }
                        else if (item.Action is TLChannelAdminLogEventActionParticipantInvite participantInvite)
                        {
                            result.Insert(0, GetServiceMessage(item));
                        }
                        else if (item.Action is TLChannelAdminLogEventActionParticipantToggleBan participantToggleBan)
                        {
                            var message = new TLMessage();
                            //message.Id = item.Id;
                            message.FromId = item.UserId;
                            message.ToId   = _channel.ToPeer();
                            message.Date   = item.Date;
                            //message.Message = from.ReadString();
                            message.Entities = new TLVector <TLMessageEntityBase>();

                            message.HasFromId   = true;
                            message.HasEntities = true;

                            var whoUser             = participantToggleBan.PrevParticipant.User;
                            TLChannelBannedRights o = null;
                            TLChannelBannedRights n = null;

                            if (participantToggleBan.PrevParticipant is TLChannelParticipantBanned prevBanned)
                            {
                                o = prevBanned.BannedRights;
                            }
                            if (participantToggleBan.NewParticipant is TLChannelParticipantBanned newBanned)
                            {
                                n = newBanned.BannedRights;
                            }

                            if (_channel.IsMegaGroup && (n == null || !n.IsViewMessages || n != null && o != null && n.UntilDate != o.UntilDate))
                            {
                                StringBuilder rights;
                                String        bannedDuration;
                                if (n != null && !AdminLogHelper.IsBannedForever(n.UntilDate))
                                {
                                    bannedDuration = "";
                                    int duration = n.UntilDate - item.Date;
                                    int days     = duration / 60 / 60 / 24;
                                    duration -= days * 60 * 60 * 24;
                                    int hours = duration / 60 / 60;
                                    duration -= hours * 60 * 60;
                                    int minutes = duration / 60;
                                    int count   = 0;
                                    for (int a = 0; a < 3; a++)
                                    {
                                        String addStr = null;
                                        if (a == 0)
                                        {
                                            if (days != 0)
                                            {
                                                addStr = LocaleHelper.Declension("Days", days);
                                                count++;
                                            }
                                        }
                                        else if (a == 1)
                                        {
                                            if (hours != 0)
                                            {
                                                addStr = LocaleHelper.Declension("Hours", hours);
                                                count++;
                                            }
                                        }
                                        else
                                        {
                                            if (minutes != 0)
                                            {
                                                addStr = LocaleHelper.Declension("Minutes", minutes);
                                                count++;
                                            }
                                        }
                                        if (addStr != null)
                                        {
                                            if (bannedDuration.Length > 0)
                                            {
                                                bannedDuration += ", ";
                                            }
                                            bannedDuration += addStr;
                                        }
                                        if (count == 2)
                                        {
                                            break;
                                        }
                                    }
                                }
                                else
                                {
                                    bannedDuration = Strings.Android.UserRestrictionsUntilForever;
                                }

                                var str = Strings.Android.EventLogRestrictedUntil;
                                rights = new StringBuilder(String.Format(str, GetUserName(whoUser, message.Entities, str.IndexOf("{0}")), bannedDuration));
                                var added = false;
                                if (o == null)
                                {
                                    o = new TLChannelBannedRights();
                                }
                                if (n == null)
                                {
                                    n = new TLChannelBannedRights();
                                }

                                void AppendChange(bool value, string label)
                                {
                                    if (!added)
                                    {
                                        rights.Append('\n');
                                        added = true;
                                    }

                                    rights.Append('\n').Append(!value ? '+' : '-').Append(' ');
                                    rights.Append(label);
                                }

                                if (o.IsViewMessages != n.IsViewMessages)
                                {
                                    AppendChange(n.IsViewMessages, Strings.Android.EventLogRestrictedReadMessages);
                                }
                                if (o.IsSendMessages != n.IsSendMessages)
                                {
                                    AppendChange(n.IsSendMessages, Strings.Android.EventLogRestrictedSendMessages);
                                }
                                if (o.IsSendStickers != n.IsSendStickers || o.IsSendInline != n.IsSendInline || o.IsSendGifs != n.IsSendGifs || o.IsSendGames != n.IsSendGames)
                                {
                                    AppendChange(n.IsSendStickers, Strings.Android.EventLogRestrictedSendStickers);
                                }
                                if (o.IsSendMedia != n.IsSendMedia)
                                {
                                    AppendChange(n.IsSendMedia, Strings.Android.EventLogRestrictedSendMedia);
                                }
                                if (o.IsEmbedLinks != n.IsEmbedLinks)
                                {
                                    AppendChange(n.IsEmbedLinks, Strings.Android.EventLogRestrictedSendEmbed);
                                }

                                message.Message = rights.ToString();
                            }
                            else
                            {
                                String str;
                                if (n != null && (o == null || n.IsViewMessages))
                                {
                                    str = Strings.Android.EventLogChannelRestricted;
                                }
                                else
                                {
                                    str = Strings.Android.EventLogChannelUnrestricted;
                                }

                                message.Message = String.Format(str, GetUserName(whoUser, message.Entities, str.IndexOf("{0}")));
                            }

                            result.Insert(0, message);
                        }
                        else if (item.Action is TLChannelAdminLogEventActionParticipantToggleAdmin participantToggleAdmin)
                        {
                            var message = new TLMessage();
                            //message.Id = item.Id;
                            message.FromId = item.UserId;
                            message.ToId   = _channel.ToPeer();
                            message.Date   = item.Date;
                            //message.Message = from.ReadString();
                            message.Entities = new TLVector <TLMessageEntityBase>();

                            message.HasFromId   = true;
                            message.HasEntities = true;

                            var whoUser  = participantToggleAdmin.PrevParticipant.User;
                            var str      = Strings.Android.EventLogPromoted;
                            var userName = GetUserName(whoUser, message.Entities, str.IndexOf("{0}"));
                            var builder  = new StringBuilder(string.Format(str, userName));
                            var added    = false;

                            TLChannelAdminRights o = null;
                            TLChannelAdminRights n = null;

                            if (participantToggleAdmin.PrevParticipant is TLChannelParticipantAdmin prevAdmin)
                            {
                                o = prevAdmin.AdminRights;
                            }
                            if (participantToggleAdmin.NewParticipant is TLChannelParticipantAdmin newAdmin)
                            {
                                n = newAdmin.AdminRights;
                            }

                            if (o == null)
                            {
                                o = new TLChannelAdminRights();
                            }
                            if (n == null)
                            {
                                n = new TLChannelAdminRights();
                            }

                            void AppendChange(bool value, string label)
                            {
                                if (!added)
                                {
                                    builder.Append('\n');
                                    added = true;
                                }

                                builder.Append('\n').Append(value ? '+' : '-').Append(' ');
                                builder.Append(label);
                            }

                            if (o.IsChangeInfo != n.IsChangeInfo)
                            {
                                AppendChange(n.IsChangeInfo, _channel.IsMegaGroup ? Strings.Android.EventLogPromotedChangeGroupInfo : Strings.Android.EventLogPromotedChangeChannelInfo);
                            }

                            if (!_channel.IsMegaGroup)
                            {
                                if (o.IsPostMessages != n.IsPostMessages)
                                {
                                    AppendChange(n.IsPostMessages, Strings.Android.EventLogPromotedPostMessages);
                                }
                                if (o.IsEditMessages != n.IsEditMessages)
                                {
                                    AppendChange(n.IsEditMessages, Strings.Android.EventLogPromotedEditMessages);
                                }
                            }
                            if (o.IsDeleteMessages != n.IsDeleteMessages)
                            {
                                AppendChange(n.IsDeleteMessages, Strings.Android.EventLogPromotedDeleteMessages);
                            }
                            if (o.IsAddAdmins != n.IsAddAdmins)
                            {
                                AppendChange(n.IsAddAdmins, Strings.Android.EventLogPromotedAddAdmins);
                            }
                            if (_channel.IsMegaGroup)
                            {
                                if (o.IsBanUsers != n.IsBanUsers)
                                {
                                    AppendChange(n.IsBanUsers, Strings.Android.EventLogPromotedBanUsers);
                                }
                            }
                            if (o.IsInviteUsers != n.IsInviteUsers)
                            {
                                AppendChange(n.IsInviteUsers, Strings.Android.EventLogPromotedAddUsers);
                            }
                            if (_channel.IsMegaGroup)
                            {
                                if (o.IsPinMessages != n.IsPinMessages)
                                {
                                    AppendChange(n.IsPinMessages, Strings.Android.EventLogPromotedPinMessages);
                                }
                            }

                            message.Message = builder.ToString();

                            result.Insert(0, message);
                        }
                        else if (item.Action is TLChannelAdminLogEventActionChangeStickerSet changeStickerSet)
                        {
                            result.Insert(0, GetServiceMessage(item));
                        }
                    }

                    if (response.Result.Events.Count < 50)
                    {
                        _hasMore = false;
                    }

                    return(result);
                }

                _viewModel.IsLoading = false;

                return(new TLMessageBase[0]);
            }
コード例 #3
0
            public override async Task <IList <TLMessageBase> > LoadDataAsync()
            {
                _viewModel.IsLoading = true;

                var maxId = Count > 0 ? _minEventId : 0;

                var response = await _protoService.GetAdminLogAsync(_inputChannel, null, null, null, maxId, 0, 50);

                if (response.IsSucceeded)
                {
                    _viewModel.IsLoading = false;

                    var result = new List <TLMessageBase>();

                    foreach (var item in response.Result.Events)
                    {
                        _minEventId = Math.Min(_minEventId, item.Id);

                        if (item.Action is TLChannelAdminLogEventActionChangeTitle changeTitle)
                        {
                            result.Insert(0, GetServiceMessage(item));
                        }
                        else if (item.Action is TLChannelAdminLogEventActionChangeAbout changeAbout)
                        {
                            var message = new TLMessage();
                            //message.Id = item.Id;
                            message.FromId   = item.UserId;
                            message.ToId     = _channel.ToPeer();
                            message.Date     = item.Date;
                            message.Message  = changeAbout.NewValue;
                            message.HasMedia = true;

                            if (string.IsNullOrEmpty(changeAbout.PrevValue))
                            {
                                message.Media = new TLMessageMediaEmpty();
                            }
                            else
                            {
                                message.Media = new TLMessageMediaWebPage
                                {
                                    WebPage = new TLWebPage
                                    {
                                        SiteName       = AppResources.EventLogPreviousGroupDescription,
                                        Description    = changeAbout.PrevValue,
                                        HasSiteName    = true,
                                        HasDescription = true
                                    }
                                };
                            }

                            result.Insert(0, message);
                            result.Insert(0, GetServiceMessage(item));
                        }
                        else if (item.Action is TLChannelAdminLogEventActionChangeUsername changeUsername)
                        {
                            var config = InMemoryCacheService.Current.GetConfig();
                            if (config == null)
                            {
                                continue;
                            }

                            var linkPrefix = config.MeUrlPrefix;
                            if (linkPrefix.EndsWith("/"))
                            {
                                linkPrefix = linkPrefix.Substring(0, linkPrefix.Length - 1);
                            }
                            if (linkPrefix.StartsWith("https://"))
                            {
                                linkPrefix = linkPrefix.Substring(8);
                            }
                            else if (linkPrefix.StartsWith("http://"))
                            {
                                linkPrefix = linkPrefix.Substring(7);
                            }

                            var message = new TLMessage();
                            //message.Id = item.Id;
                            message.FromId      = item.UserId;
                            message.ToId        = _channel.ToPeer();
                            message.Date        = item.Date;
                            message.Message     = string.IsNullOrEmpty(changeUsername.NewValue) ? string.Empty : $"https://{linkPrefix}/{changeUsername.NewValue}";
                            message.Entities    = new TLVector <TLMessageEntityBase>();
                            message.HasMedia    = true;
                            message.HasEntities = true;

                            message.Entities.Add(new TLMessageEntityUrl {
                                Offset = 0, Length = message.Message.Length
                            });

                            if (string.IsNullOrEmpty(changeUsername.PrevValue))
                            {
                                message.Media = new TLMessageMediaEmpty();
                            }
                            else
                            {
                                message.Media = new TLMessageMediaWebPage
                                {
                                    WebPage = new TLWebPage
                                    {
                                        SiteName       = AppResources.EventLogPreviousLink,
                                        Description    = $"https://{linkPrefix}/{changeUsername.PrevValue}",
                                        HasSiteName    = true,
                                        HasDescription = true
                                    }
                                };
                            }

                            result.Insert(0, message);
                            result.Insert(0, GetServiceMessage(item));
                        }
                        else if (item.Action is TLChannelAdminLogEventActionChangePhoto changePhoto)
                        {
                            result.Insert(0, GetServiceMessage(item));
                        }
                        else if (item.Action is TLChannelAdminLogEventActionToggleInvites toggleInvites)
                        {
                            result.Insert(0, GetServiceMessage(item));
                        }
                        else if (item.Action is TLChannelAdminLogEventActionToggleSignatures toggleSignatures)
                        {
                            result.Insert(0, GetServiceMessage(item));
                        }
                        else if (item.Action is TLChannelAdminLogEventActionUpdatePinned updatePinned)
                        {
                            // Patch for view
                            if (updatePinned.Message is TLMessageCommonBase messageCommon)
                            {
                                messageCommon.ReplyToMsgId = null;
                                messageCommon.IsOut        = false;
                                messageCommon.IsPost       = false;
                            }

                            if (!(updatePinned.Message is TLMessageEmpty))
                            {
                                result.Insert(0, updatePinned.Message);
                            }

                            result.Insert(0, GetServiceMessage(item));
                        }
                        else if (item.Action is TLChannelAdminLogEventActionEditMessage editMessage)
                        {
                            // TODO: the actual message
                            if (editMessage.NewMessage is TLMessageCommonBase messageCommon)
                            {
                                messageCommon.ReplyToMsgId = editMessage.PrevMessage.Id;
                                messageCommon.IsOut        = false;
                                messageCommon.IsPost       = false;
                            }
                            if (editMessage.NewMessage is TLMessage message)
                            {
                                message.Reply       = editMessage.PrevMessage;
                                message.EditDate    = null;
                                message.HasEditDate = false;
                            }

                            result.Insert(0, editMessage.NewMessage);
                            result.Insert(0, GetServiceMessage(item));
                        }
                        else if (item.Action is TLChannelAdminLogEventActionDeleteMessage deleteMessage)
                        {
                            // Patch for view
                            if (deleteMessage.Message is TLMessageCommonBase messageCommon)
                            {
                                messageCommon.ReplyToMsgId = null;
                                messageCommon.IsOut        = false;
                                messageCommon.IsPost       = false;
                            }

                            result.Insert(0, deleteMessage.Message);
                            result.Insert(0, GetServiceMessage(item));
                        }
                        else if (item.Action is TLChannelAdminLogEventActionParticipantJoin participantJoin)
                        {
                            result.Insert(0, GetServiceMessage(item));
                        }
                        else if (item.Action is TLChannelAdminLogEventActionParticipantLeave participantLeave)
                        {
                            result.Insert(0, GetServiceMessage(item));
                        }
                        else if (item.Action is TLChannelAdminLogEventActionParticipantInvite participantInvite)
                        {
                            var message = new TLMessage();
                            //message.Id = item.Id;
                            message.FromId = item.UserId;
                            message.ToId   = _channel.ToPeer();
                            message.Date   = item.Date;
                            //message.Message = from.ReadString();
                            message.Entities = new TLVector <TLMessageEntityBase>();

                            message.HasFromId   = true;
                            message.HasEntities = true;

                            var whoUser  = participantInvite.Participant.User;
                            var str      = AppResources.EventLogInvited;
                            var userName = GetUserName(whoUser, message.Entities, str.IndexOf("{0}"));
                            var builder  = new StringBuilder(string.Format(str, userName));

                            message.Message = string.Format(str, userName);
                            result.Insert(0, message);

                            //result.Insert(0, GetServiceMessage(item));
                        }
                        else if (item.Action is TLChannelAdminLogEventActionParticipantToggleBan participantToggleBan)
                        {
                            var message = new TLMessage();
                            //message.Id = item.Id;
                            message.FromId = item.UserId;
                            message.ToId   = _channel.ToPeer();
                            message.Date   = item.Date;
                            //message.Message = from.ReadString();
                            message.Entities = new TLVector <TLMessageEntityBase>();

                            message.HasFromId   = true;
                            message.HasEntities = true;

                            var whoUser             = participantToggleBan.PrevParticipant.User;
                            TLChannelBannedRights o = null;
                            TLChannelBannedRights n = null;

                            if (participantToggleBan.PrevParticipant is TLChannelParticipantBanned prevBanned)
                            {
                                o = prevBanned.BannedRights;
                            }
                            if (participantToggleBan.NewParticipant is TLChannelParticipantBanned newBanned)
                            {
                                n = newBanned.BannedRights;
                            }
                            if (!_channel.IsMegaGroup || (n != null && n.IsViewMessages && (n == null || o == null || n.UntilDate == o.UntilDate)))
                            {
                                string str;
                                if (n == null || !(o == null || n.IsViewMessages))
                                {
                                    str = AppResources.EventLogChannelUnrestricted;
                                }
                                else
                                {
                                    str = AppResources.EventLogChannelRestricted;
                                }

                                var userName = GetUserName(whoUser, message.Entities, str.IndexOf("{0}"));
                                message.Message = string.Format(str, userName);
                            }
                            else
                            {
                                StringBuilder builder;
                                if (n == null || AdminLogHelper.IsBannedForever(n.UntilDate))
                                {
                                    var str      = AppResources.EventLogRestricted;
                                    var userName = GetUserName(whoUser, message.Entities, str.IndexOf("{0}"));
                                    builder = new StringBuilder(String.Format(str, userName));
                                }
                                else
                                {
                                    var bannedDuration = "";
                                    int duration       = n.UntilDate - item.Date;
                                    int days           = ((duration / 60) / 60) / 24;
                                    duration -= ((days * 60) * 60) * 24;
                                    int hours   = (duration / 60) / 60;
                                    int minutes = (duration - ((hours * 60) * 60)) / 60;
                                    int count   = 0;
                                    for (int a = 0; a < 3; a++)
                                    {
                                        String addStr = null;
                                        if (a == 0)
                                        {
                                            if (days != 0)
                                            {
                                                //addStr = LocaleController.formatPluralString("Days", days);
                                                addStr = $"{days} days";
                                                count++;
                                            }
                                        }
                                        else if (a == 1)
                                        {
                                            if (hours != 0)
                                            {
                                                //addStr = LocaleController.formatPluralString("Hours", hours);
                                                addStr = $"{hours} hours";
                                                count++;
                                            }
                                        }
                                        else if (minutes != 0)
                                        {
                                            //addStr = LocaleController.formatPluralString("Minutes", minutes);
                                            addStr = $"{minutes} minutes";
                                            count++;
                                        }
                                        if (addStr != null)
                                        {
                                            if (bannedDuration.Length > 0)
                                            {
                                                bannedDuration = bannedDuration + ", ";
                                            }
                                            bannedDuration = bannedDuration + addStr;
                                        }
                                        if (count == 2)
                                        {
                                            break;
                                        }
                                    }

                                    var str      = AppResources.EventLogRestrictedUntil;
                                    var userName = GetUserName(whoUser, message.Entities, str.IndexOf("{0}"));
                                    builder = new StringBuilder(String.Format(str, userName, bannedDuration));
                                }

                                var added = false;
                                if (o == null)
                                {
                                    o = new TLChannelBannedRights();
                                }
                                if (n == null)
                                {
                                    n = new TLChannelBannedRights();
                                }

                                void AppendChange(bool value, string label)
                                {
                                    if (!added)
                                    {
                                        builder.Append('\n');
                                        added = true;
                                    }

                                    builder.Append('\n').Append(!value ? '+' : '-').Append(' ');
                                    builder.Append(label);
                                }

                                if (o.IsViewMessages != n.IsViewMessages)
                                {
                                    AppendChange(n.IsViewMessages, AppResources.EventLogRestrictedReadMessages);
                                }
                                if (o.IsSendMessages != n.IsSendMessages)
                                {
                                    AppendChange(n.IsSendMessages, AppResources.EventLogRestrictedSendMessages);
                                }
                                if (!(o.IsSendStickers == n.IsSendStickers && o.IsSendInline == n.IsSendInline && o.IsSendGifs == n.IsSendGifs && o.IsSendGames == n.IsSendGames))
                                {
                                    AppendChange(n.IsSendStickers, AppResources.EventLogRestrictedSendStickers);
                                }
                                if (o.IsSendMedia != n.IsSendMedia)
                                {
                                    AppendChange(n.IsSendMedia, AppResources.EventLogRestrictedSendMedia);
                                }
                                if (o.IsEmbedLinks != n.IsEmbedLinks)
                                {
                                    AppendChange(n.IsEmbedLinks, AppResources.EventLogRestrictedSendEmbed);
                                }

                                message.Message = builder.ToString();
                            }

                            result.Insert(0, message);
                        }
                        else if (item.Action is TLChannelAdminLogEventActionParticipantToggleAdmin participantToggleAdmin)
                        {
                            var message = new TLMessage();
                            //message.Id = item.Id;
                            message.FromId = item.UserId;
                            message.ToId   = _channel.ToPeer();
                            message.Date   = item.Date;
                            //message.Message = from.ReadString();
                            message.Entities = new TLVector <TLMessageEntityBase>();

                            message.HasFromId   = true;
                            message.HasEntities = true;

                            var whoUser  = participantToggleAdmin.PrevParticipant.User;
                            var str      = AppResources.EventLogPromoted;
                            var userName = GetUserName(whoUser, message.Entities, str.IndexOf("{0}"));
                            var builder  = new StringBuilder(string.Format(str, userName));
                            var added    = false;

                            TLChannelAdminRights o = null;
                            TLChannelAdminRights n = null;

                            if (participantToggleAdmin.PrevParticipant is TLChannelParticipantAdmin prevAdmin)
                            {
                                o = prevAdmin.AdminRights;
                            }
                            if (participantToggleAdmin.NewParticipant is TLChannelParticipantAdmin newAdmin)
                            {
                                n = newAdmin.AdminRights;
                            }

                            if (o == null)
                            {
                                o = new TLChannelAdminRights();
                            }
                            if (n == null)
                            {
                                n = new TLChannelAdminRights();
                            }

                            void AppendChange(bool value, string label)
                            {
                                if (!added)
                                {
                                    builder.Append('\n');
                                    added = true;
                                }

                                builder.Append('\n').Append(value ? '+' : '-').Append(' ');
                                builder.Append(label);
                            }

                            if (o.IsChangeInfo != n.IsChangeInfo)
                            {
                                AppendChange(n.IsChangeInfo, _channel.IsMegaGroup ? AppResources.EventLogPromotedChangeGroupInfo : AppResources.EventLogPromotedChangeChannelInfo);
                            }

                            if (!_channel.IsMegaGroup)
                            {
                                if (o.IsPostMessages != n.IsPostMessages)
                                {
                                    AppendChange(n.IsPostMessages, AppResources.EventLogPromotedPostMessages);
                                }
                                if (o.IsEditMessages != n.IsEditMessages)
                                {
                                    AppendChange(n.IsEditMessages, AppResources.EventLogPromotedEditMessages);
                                }
                            }
                            if (o.IsDeleteMessages != n.IsDeleteMessages)
                            {
                                AppendChange(n.IsDeleteMessages, AppResources.EventLogPromotedDeleteMessages);
                            }
                            if (o.IsAddAdmins != n.IsAddAdmins)
                            {
                                AppendChange(n.IsAddAdmins, AppResources.EventLogPromotedAddAdmins);
                            }
                            if (_channel.IsMegaGroup)
                            {
                                if (o.IsBanUsers != n.IsBanUsers)
                                {
                                    AppendChange(n.IsBanUsers, AppResources.EventLogPromotedBanUsers);
                                }
                                if (o.IsInviteUsers != n.IsInviteUsers)
                                {
                                    AppendChange(n.IsInviteUsers, AppResources.EventLogPromotedAddUsers);
                                }
                                if (o.IsPinMessages != n.IsPinMessages)
                                {
                                    AppendChange(n.IsPinMessages, AppResources.EventLogPromotedPinMessages);
                                }
                            }

                            message.Message = builder.ToString();

                            result.Insert(0, message);
                        }
                    }

                    if (response.Result.Events.Count < 50)
                    {
                        _hasMore = false;
                    }

                    return(result);
                }

                _viewModel.IsLoading = false;

                return(new TLMessageBase[0]);
            }