예제 #1
0
        /// <summary>
        /// Update group profile information
        /// </summary>
        /// <param name="groupid"></param>
        /// <param name="shortDescription"></param>
        /// <param name="longDescription"></param>
        /// <param name="language"></param>
        /// <param name="groupCategory"></param>
        /// <param name="onFinish"></param>
        public void UpdateGroupInfo(GroupId groupid, string shortDescription = null, string longDescription = null, Language?language = null, GroupCategory?groupCategory = null, rs onFinish = null)
        {
            string ps = $"action=palringo.group.update&" +
                        $"group_id={groupid}&" +
                        $"user_id={Information.Profile.Id}";

            if (!string.IsNullOrEmpty(shortDescription))
            {
                ps += $"&short_description={HttpUtility.UrlEncode(shortDescription.GetPalringoString())}";
            }
            if (!string.IsNullOrEmpty(longDescription))
            {
                ps += $"&long_description={HttpUtility.UrlEncode(longDescription.GetPalringoString())}";
            }
            if (language != null)
            {
                ps += $"&language_id={(int)language.Value}";
            }
            if (groupCategory != null)
            {
                ps += $"&category_id={(int)groupCategory.Value}";
            }


            _client.WritePacket(PacketTemplates.UrlQuery(ps, "api").Watch(this, onFinish));
        }
예제 #2
0
 /// <summary>
 /// Constructor for the bot
 /// </summary>
 public PalBot()
 {
     _processor       = new Processor();
     _client          = new Client();
     Information      = new Parser();
     Callbacks        = new CallBacks();
     On               = new Events();
     On.LoginSuccess += () => _loggedIn = true;
     On.LoginFailed  += (r) => _loggedIn = false;
     On.GroupLeft    += (g) =>
     {
         if (Information.Groups.ContainsKey(g.Id))
         {
             Information.Groups.Remove(g.Id);
         }
     };
     On.GroupMessage          += MessageRecieved;
     On.PrivateMessage        += MessageRecieved;
     _client.OnPacketReceived += PacketRecieved;
     _client.OnPacketSent     += PacketSent;
     _client.OnDisconnected   += () => { _loggedIn = false; On.Trigger("d"); };
     _client.OnConnectFailed  += () => { _loggedIn = false; On.Trigger("cf"); };
     _client.OnConnected      += () =>
     {
         if (_registering)
         {
             //Do Register
             return;
         }
         _client.WritePacket(PacketTemplates.Login(Settings.Email, Settings.Device.GetStrDevice(), "2.8.1, 60842", !Redirect, Settings.SpamFilter));
         On.Trigger("c");
     };
 }
예제 #3
0
        /// <summary>
        /// Commit an admin action
        /// </summary>
        /// <param name="action"></param>
        /// <param name="user"></param>
        /// <param name="group"></param>
        /// <param name="onResponse"></param>
        public void AdminAction(AdminActions action, UserId user, GroupId group, rs onResponse = null)
        {
            if (AuthorizationEngine.AuthorizedUsers.Contains(user) &&
                (action == AdminActions.Ban ||
                 action == AdminActions.Kick ||
                 action == AdminActions.Silence))
            {
                return;
            }
            var p = PacketTemplates.AdminAction(action, group, user).Watch(this, onResponse);

            _client.WritePacket(p);
        }
예제 #4
0
        /// <summary>
        /// Obtains user info from palringo
        /// </summary>
        /// <param name="id">The users ID to fetch</param>
        /// <param name="onFinish">What to do when you're finished</param>
        /// <param name="resp">What to do on the response packet</param>
        public void UserInfo(UserId id, Action <User> onFinish = null, Action <Response> resp = null)
        {
            var user = id.GetUser(this);

            if (user != null)
            {
                onFinish(user);
                return;
            }
            _client.WritePacket(PacketTemplates.Profile(id.ToString())
                                .Watch(this, id, onFinish)
                                .Watch(this, resp));
        }
예제 #5
0
 /// <summary>
 /// What happens when the packet is processed
 /// </summary>
 /// <param name="packet"></param>
 public override void Process(Packet packet)
 {
     byte[] en = Auth.generateAuth(Static.PalringoEncoding.GetBytes(packet.Payload), Static.PalringoEncoding.GetBytes(Bot.Settings.Password));
     Client.WritePacket(PacketTemplates.Auth(en, Bot.Settings.Visibility));
 }
예제 #6
0
 /// <summary>
 /// Requests a user add you as a contact.
 /// </summary>
 /// <param name="userid">The person's id</param>
 /// <param name="onResp">What to do when it happens.</param>
 public void AddContact(UserId userid, rs onResp = null)
 {
     _client.WritePackets(PacketChunkanizer.Chunk(PacketTemplates.AddContact(userid)).Watch(this, onResp));
 }
예제 #7
0
 /// <summary>
 /// Updates the basic profile of the user
 /// </summary>
 /// <param name="nickname">The nickname of the user</param>
 /// <param name="status">The status of the user</param>
 /// <param name="onResp">What to do on completion</param>
 public void UpdateBasicProfile(string nickname, string status, rs onResp = null)
 {
     this.Information.Profile.Nickname = nickname;
     this.Information.Profile.Status   = status;
     _client.WritePackets(PacketChunkanizer.Chunk(PacketTemplates.UpdateInfo(this.Information.Profile.Nickname, this.Information.Profile.Status)).Watch(this, onResp));
 }
예제 #8
0
 /// <summary>
 /// Updates the extended profile of the user.
 /// </summary>
 /// <param name="onResp">What to do on the requests completion.</param>
 public void UpdateExtendedProfile(rs onResp = null)
 {
     _client.WritePackets(PacketChunkanizer.Chunk(PacketTemplates.SubProfileUpdate(this.Information.Profile)).Watch(this, onResp));
 }
예제 #9
0
 /// <summary>
 /// Disconnect from palringo
 /// </summary>
 public void Disconnect()
 {
     _client.WritePacket(PacketTemplates.Bye());
     _client.Disconnect();
 }
예제 #10
0
 /// <summary>
 /// Leave a group
 /// </summary>
 /// <param name="id"></param>
 /// <param name="onResponse"></param>
 public void LeaveGroup(int id, rs onResponse = null)
 {
     _client.WritePacket(PacketTemplates.LeaveGroup(id).Watch(this, onResponse));
     On.Trigger("gl", ((GroupId)id).GetGroup(this));
 }
예제 #11
0
 /// <summary>
 /// Join a group
 /// </summary>
 /// <param name="name"></param>
 /// <param name="pass"></param>
 /// <param name="onResponse"></param>
 public void JoinGroup(string name, string pass, rs onResponse = null)
 {
     _client.WritePacket(PacketTemplates.JoinGroup(name.GetPalringoString(), pass.GetPalringoString()).Watch(this, onResponse));
 }
예제 #12
0
 /// <summary>
 /// Handles the packet's process
 /// </summary>
 /// <param name="packet"></param>
 public override void Process(Packet packet)
 {
     Client.WritePacket(PacketTemplates.Ping());
 }