@@ -31,6 +31,7 @@ public class Subreddit : Thing
31
31
private const string AcceptModeratorInviteUrl = "/api/accept_moderator_invite" ;
32
32
private const string LeaveModerationUrl = "/api/unfriend" ;
33
33
private const string BanUserUrl = "/api/friend" ;
34
+ private const string UnBanUserUrl = "/api/unfriend" ;
34
35
private const string AddModeratorUrl = "/api/friend" ;
35
36
private const string AddContributorUrl = "/api/friend" ;
36
37
private const string ModeratorsUrl = "/r/{0}/about/moderators.json" ;
@@ -42,6 +43,7 @@ public class Subreddit : Thing
42
43
private const string SearchUrlDate = "/r/{0}/search.json?q=timestamp:{1}..{2}&restrict_sr=on&sort={3}&syntax=cloudsearch" ;
43
44
private const string ModLogUrl = "/r/{0}/about/log.json" ;
44
45
private const string ContributorsUrl = "/r/{0}/about/contributors.json" ;
46
+ private const string BannedUsersUrl = "/r/{0}/about/banned.json" ;
45
47
46
48
[ JsonIgnore ]
47
49
private Reddit Reddit { get ; set ; }
@@ -346,6 +348,13 @@ public Listing<Contributor> Contributors
346
348
}
347
349
}
348
350
351
+ public Listing < BannedUser > BannedUsers
352
+ {
353
+ get
354
+ {
355
+ return new Listing < BannedUser > ( Reddit , string . Format ( BannedUsersUrl , Name ) , WebAgent ) ;
356
+ }
357
+ }
349
358
350
359
public async Task < Subreddit > InitAsync ( Reddit reddit , JToken json , IWebAgent webAgent )
351
360
{
@@ -741,6 +750,91 @@ public async Task BanUserAsync(string user, string reason)
741
750
var response = await request . GetResponseAsync ( ) ;
742
751
var result = WebAgent . GetResponseString ( response . GetResponseStream ( ) ) ;
743
752
}
753
+
754
+ /// <summary>
755
+ /// Bans a user
756
+ /// </summary>
757
+ /// <param name="user">User to ban, by username</param>
758
+ /// <param name="reason">Reason for ban, shows in ban note as 'reason: note' or just 'note' if blank</param>
759
+ /// <param name="note">Mod notes about ban, shows in ban note as 'reason: note'</param>
760
+ /// <param name="duration">Number of days to ban user, 0 for permanent</param>
761
+ /// <param name="message">Message to include in ban PM</param>
762
+ public void BanUser ( string user , string reason , string note , int duration , string message )
763
+ {
764
+ var request = WebAgent . CreatePost ( BanUserUrl ) ;
765
+ WebAgent . WritePostBody ( request . GetRequestStream ( ) , new
766
+ {
767
+ api_type = "json" ,
768
+ uh = Reddit . User . Modhash ,
769
+ r = Name ,
770
+ container = FullName ,
771
+ type = "banned" ,
772
+ name = user ,
773
+ ban_reason = reason ,
774
+ note = note ,
775
+ duration = duration <= 0 ? "" : duration . ToString ( ) ,
776
+ ban_message = message
777
+ } ) ;
778
+ var response = request . GetResponse ( ) ;
779
+ var result = WebAgent . GetResponseString ( response . GetResponseStream ( ) ) ;
780
+ }
781
+
782
+ public async Task BanUserAsync ( string user , string reason , string note , int duration , string message )
783
+ {
784
+ var request = WebAgent . CreatePost ( BanUserUrl ) ;
785
+ WebAgent . WritePostBody ( await request . GetRequestStreamAsync ( ) , new
786
+ {
787
+ api_type = "json" ,
788
+ uh = Reddit . User . Modhash ,
789
+ r = Name ,
790
+ container = FullName ,
791
+ type = "banned" ,
792
+ name = user ,
793
+ ban_reason = reason ,
794
+ note = note ,
795
+ duration = duration <= 0 ? "" : duration . ToString ( ) ,
796
+ ban_message = message
797
+ } ) ;
798
+ var response = await request . GetResponseAsync ( ) ;
799
+ var result = WebAgent . GetResponseString ( response . GetResponseStream ( ) ) ;
800
+ }
801
+
802
+ /// <summary>
803
+ /// Unbans a user
804
+ /// </summary>
805
+ /// <param name="user">User to unban, by username</param>
806
+ public void UnBanUser ( string user )
807
+ {
808
+ var request = WebAgent . CreatePost ( UnBanUserUrl ) ;
809
+ WebAgent . WritePostBody ( request . GetRequestStream ( ) , new
810
+ {
811
+ uh = Reddit . User . Modhash ,
812
+ r = Name ,
813
+ type = "banned" ,
814
+ container = FullName ,
815
+ executed = "removed" ,
816
+ name = user ,
817
+ } ) ;
818
+ var response = request . GetResponse ( ) ;
819
+ var result = WebAgent . GetResponseString ( response . GetResponseStream ( ) ) ;
820
+ }
821
+
822
+ public async Task UnBanUserAsync ( string user )
823
+ {
824
+ var request = WebAgent . CreatePost ( UnBanUserUrl ) ;
825
+ WebAgent . WritePostBody ( await request . GetRequestStreamAsync ( ) , new
826
+ {
827
+ uh = Reddit . User . Modhash ,
828
+ r = Name ,
829
+ type = "banned" ,
830
+ container = FullName ,
831
+ executed = "removed" ,
832
+ name = user ,
833
+ } ) ;
834
+ var response = await request . GetResponseAsync ( ) ;
835
+ var result = WebAgent . GetResponseString ( response . GetResponseStream ( ) ) ;
836
+ }
837
+
744
838
private Post Submit ( SubmitData data )
745
839
{
746
840
if ( Reddit . User == null )
0 commit comments