import { BaseSearchOptions, ModAction, Sort, SubmitLinkOptions, SubmitSelfPostOptions } from '../snoowrap'; import Comment from './Comment'; import Listing, { ListingOptions } from './Listing'; import PrivateMessage from './PrivateMessage'; import RedditContent from './RedditContent'; import RedditUser from './RedditUser'; import Submission from './Submission'; import { RichTextFlair } from './VoteableContent'; import WikiPage, { WikiPageRevision } from './WikiPage'; import ModmailConversation from './ModmailConversation'; export default class Subreddit extends RedditContent { accounts_active_is_fuzzed: boolean; accounts_active: number; active_user_count: number; advertiser_category: string | null; all_original_content: boolean; allow_discovery: boolean; allow_images: boolean; allow_videogifs: boolean; allow_videos: boolean; /** HEX color code */ banner_background_color: string; /** URL of the banner image used on desktop Reddit */ banner_background_image: string; /** URL of the banner image used on the mobile Reddit app */ banner_img: string; banner_size: [number, number] | null; can_assign_link_flair: boolean; can_assign_user_flair: boolean; collapse_deleted_comments: boolean; comment_score_hide_mins: number; /** Image URL of the subreddit icon */ community_icon: string; description_html: string; description: string; display_name: string; display_name_prefixed: string; emojis_custom_size: [number, number] | null; emojis_enabled: boolean; has_menu_widget: boolean; header_img: string | null; header_size: [number, number] | null; header_title: string | null; hide_ads: boolean; icon_img: string; icon_size: [number, number] | null; is_enrolled_in_new_modmail: boolean | null; key_color: string; lang: string; link_flair_enabled: boolean; link_flair_position: '' | 'left' | 'right'; /** Will be null if user is not subscribed to this subreddit */ notification_level: string | null; over18: boolean; /** HEX color code */ primary_color: string; public_description_html: string; public_description: string; public_traffic: boolean; quarantine: boolean; show_media_preview: boolean; show_media: boolean; spoilers_enabled: boolean; submission_type: LinkType; submit_link_label: string | null; submit_text_html: string; submit_text_label: string | null; submit_text: string; subreddit_type: SubredditType; subscribers: number; suggested_comment_sort: Sort | null; title: string; url: string; user_can_flair_in_sr: boolean; user_flair_background_color: string | null; user_flair_css_class: string | null; user_flair_enabled_in_sr: boolean; user_flair_position: '' | 'left' | 'right'; user_flair_richtext: RichTextFlair[]; user_flair_template_id: string | null; user_flair_text: string | null; user_flair_text_color: 'dark' | 'light' | null; user_has_favorited: boolean; user_is_banned: boolean; user_is_contributor: boolean; user_is_moderator: boolean; user_is_muted: boolean; user_is_subscriber: boolean; user_sr_flair_enabled: boolean; user_sr_theme_enabled: boolean; whitelist_status: string; wiki_enabled: boolean; wls: number; acceptModeratorInvite(): Promise; addContributor(options: { name: string; }): Promise; addWikiContributor(options: { name: string; }): Promise; banUser(options: BanOptions): Promise; configureFlair(options: FlairConfig): Promise; createLinkFlairTemplate(options: FlairParams): Promise; createUserFlairTemplate(options: FlairParams): Promise; deleteAllLinkFlairTemplates(): Promise; deleteAllUserFlairTemplates(): Promise; deleteBanner(): Promise; deleteFlairTemplate(options: { flair_template_id: string; }): Promise; deleteHeader(): Promise; deleteIcon(): Promise; deleteImage(options: { imageName: string; }): Promise; deleteUserFlair(name: string): Promise; editSettings(options: SubredditSettings): Promise; getBannedUsers(options?: ListingOptions & { name?: string }): Promise>; getContributors(options?: ListingOptions & { name?: string }): Promise>; getControversial(options?: ListingOptions & { time?: string }): Promise>; getEdited(options?: ListingOptions & { only?: 'links' | 'comments' }): Promise>; getHot(options?: ListingOptions): Promise>; getLinkFlairTemplates(linkId?: string): Promise; getModerationLog(opts?: ListingOptions & { mods?: string[]; type?: ModActionType}): Promise>; getModerators(options?: ListingOptions & { name?: string }): RedditUser[]; getModmail(options?: ListingOptions): Promise>; getNewModmailConversations(options?: ListingOptions): Promise>; getModqueue(options?: ListingOptions & { only?: 'links' | 'comments' }): Promise>; getMutedUsers(options?: ListingOptions & { name?: string }): Promise>; getMyFlair(): Promise; getNew(options?: ListingOptions): Promise>; getNewComments(options?: ListingOptions): Promise>; getRandomSubmission(): Promise; getRecommendedSubreddits(options?: { omit?: string[]; }): Promise; getReports(options?: ListingOptions & { only?: 'links' | 'comments' }): Promise>; getRising(options?: ListingOptions): Promise>; getRules(): Promise<{ rules: Rule[]; site_rules: string[] }>; getSettings(): Promise; getSpam(options?: ListingOptions & { only?: 'links' | 'comments' }): Promise>; getSticky(options?: { num?: number }): Promise; getStylesheet(): Promise; getSubmitText(): Promise; getTop(options?: ListingOptions & { time?: Timespan }): Promise>; getUnmoderated(options?: ListingOptions & { only?: 'links' | 'comments' }): Promise>; getUserFlair(name: string): Promise; getUserFlairList(options?: ListingOptions & { name?: string; }): Promise>; getUserFlairTemplates(): Promise; getWikiBannedUsers(options?: ListingOptions & { name?: string }): Promise>; getWikiContributors(options?: ListingOptions & { name?: string }): Promise>; getWikiPage(name: string): WikiPage; getWikiPages(): Promise; getWikiRevisions(options?: ListingOptions): Promise>; hideMyFlair(): Promise; inviteModerator(options: { name: string; permissions?: ModeratorPermission[]; }): Promise; leaveContributor(): Promise; leaveModerator(): Promise; muteUser(options: { name: string; }): Promise; removeContributor(options: { name: string; }): Promise; removeModerator(options: { name: string; }): Promise; removeWikiContributor(options: { name: string; }): Promise; revokeModeratorInvite(options: { name: string; }): Promise; search(options: BaseSearchOptions): Promise>; selectMyFlair(options: { flair_template_id: string; text?: string; }): Promise; setModeratorPermissions(options: { name: string; permissions: ModeratorPermission; }): Promise; setMultipleUserFlairs(flairs: Array<{ name: string; text: string; cssClass: string; }>): Promise; showMyFlair(): Promise; submitLink(options: SubmitLinkOptions): Promise; submitSelfpost(options: SubmitSelfPostOptions): Promise; subscribe(): Promise; unbanUser(options: { name: string; }): Promise; unmuteUser(options: { name: string; }): Promise; unsubscribe(): Promise; unwikibanUser(options: { name: string; }): Promise; updateStylesheet(options: { css: string; reason?: string; }): Promise; uploadBannerImage(options: ImageUploadOptions): Promise; uploadHeaderImage(options: ImageUploadOptions): Promise; uploadIcon(options: ImageUploadOptions): Promise; uploadStylesheetImage(options: ImageUploadOptions & { name: string; }): Promise; wikibanUser(options: { name: string; }): Promise; } // this is per-flair interface FlairParams { text: string; cssClass?: string; textEditable?: boolean; } // this is for the entire subreddit interface FlairConfig { userFlairEnabled: boolean; userFlairPosition: 'left' | 'right'; userFlairSelfAssignEnabled: boolean; linkFlairPosition: 'left' | 'right'; linkFlairSelfAssignEnabled: boolean; } export interface FlairTemplate { flair_css_class: string; flair_template_id: string; flair_text_editable: string; flair_position: string; flair_text: string; } interface UserFlair { flair_css_class: string; user: string; flair_text: string; } interface UserDetails { date: number; name: string; id: string; } type BannedUser = UserDetails & { note: string; }; type MutedUser = UserDetails; type Contributor = UserDetails; type SubredditType = 'public' | 'private' | 'restricted' | 'gold_restricted' | 'gold_only' | 'archived' | 'employees_only'; type LinkType = 'any' | 'link' | 'self'; type SpamLevel = 'low' | 'high' | 'all'; export interface SubredditSettings { name: string; title: string; public_description: string; description: string; submit_text?: string; hide_ads?: boolean; lang?: string; type?: SubredditType; link_type?: LinkType; submit_link_label?: string; submit_text_label?: string; wikimode?: 'modonly' | 'anyone' | 'disabled'; wiki_edit_karma?: number; wiki_edit_age?: number; spam_links?: SpamLevel; spam_selfposts?: SpamLevel; spam_comments?: SpamLevel; over_18?: boolean; allow_top?: boolean; show_media?: boolean; exclude_banned_modqueue?: boolean; public_traffic?: boolean; collapse_deleted_comments?: boolean; suggested_comment_sort?: Sort; // TODO rename AvailableSorts? spoilers_enabled?: boolean; default_set?: boolean; } interface ImageUploadOptions { file: string | ReadableStream; imageType?: string; } interface Rule { kind: string; short_name: string; description: string; violation_reason: string; created_utc: string; priority: number; description_html: string; } type ModeratorPermission = 'wiki' | 'posts' | 'access' | 'mail' | 'config' | 'flair'; interface BanOptions { name: string; banMessage?: string; banReason?: string; duration?: number; banNote?: string; } type Timespan = 'hour' | 'day' | 'week' | 'month' | 'year' | 'all'; export type ModActionType = 'banuser' | 'unbanuser' | 'removelink' | 'approvelink' | 'removecomment' | 'approvecomment' | 'addmoderator' | 'invitemoderator' | 'uninvitemoderator' | 'acceptmoderatorinvite' | 'removemoderator' | 'addcontributor' | 'removecontributor' | 'editsettings' | 'editflair' | 'distinguish' | 'marknsfw' | 'wikibanned' | 'wikicontributor' | 'wikiunbanned' | 'wikipagelisted' | 'removewikicontributor' | 'wikirevise' | 'wikipermlevel' | 'ignorereports' | 'unignorereports' | 'setpermissions' | 'setsuggestedsort' | 'sticky' | 'unsticky' | 'setcontestmode' | 'unsetcontestmode' | 'lock' | 'unlock' | 'muteuser' | 'unmuteuser' | 'createrule' | 'editrule' | 'deleterule' | 'spoiler' | 'unspoiler';