diff options
Diffstat (limited to '')
| -rw-r--r-- | bot/constants.py | 209 | ||||
| -rw-r--r-- | config-default.yml | 182 | 
2 files changed, 201 insertions, 190 deletions
| diff --git a/bot/constants.py b/bot/constants.py index 2f5cf0e8a..95e22513f 100644 --- a/bot/constants.py +++ b/bot/constants.py @@ -13,7 +13,7 @@ their default values from `config-default.yml`.  import logging  import os  from collections.abc import Mapping -from enum import Enum, IntEnum +from enum import Enum  from pathlib import Path  from typing import Dict, List, Optional @@ -197,8 +197,8 @@ class Bot(metaclass=YAMLGetter):      section = "bot"      prefix: str -    token: str      sentry_dsn: Optional[str] +    token: str  class Redis(metaclass=YAMLGetter): @@ -206,29 +206,30 @@ class Redis(metaclass=YAMLGetter):      subsection = "redis"      host: str -    port: int      password: Optional[str] +    port: int      use_fakeredis: bool  # If this is True, Bot will use fakeredis.aioredis  class Filter(metaclass=YAMLGetter):      section = "filter" -    filter_zalgo: bool -    filter_invites: bool      filter_domains: bool      filter_everyone_ping: bool +    filter_invites: bool +    filter_zalgo: bool      watch_regex: bool      watch_rich_embeds: bool      # Notifications are not expected for "watchlist" type filters -    notify_user_zalgo: bool -    notify_user_invites: bool +      notify_user_domains: bool      notify_user_everyone_ping: bool +    notify_user_invites: bool +    notify_user_zalgo: bool -    ping_everyone: bool      offensive_msg_delete_days: int +    ping_everyone: bool      channel_whitelist: List[int]      role_whitelist: List[int] @@ -245,10 +246,10 @@ class Colours(metaclass=YAMLGetter):      section = "style"      subsection = "colours" -    soft_red: int +    bright_green: int      soft_green: int      soft_orange: int -    bright_green: int +    soft_red: int      orange: int      pink: int      purple: int @@ -265,41 +266,42 @@ class Emojis(metaclass=YAMLGetter):      section = "style"      subsection = "emojis" -    defcon_disabled: str  # noqa: E704 -    defcon_enabled: str  # noqa: E704 -    defcon_updated: str  # noqa: E704 - -    status_online: str -    status_offline: str -    status_idle: str -    status_dnd: str - -    badge_staff: str -    badge_partner: str -    badge_hypesquad: str      badge_bug_hunter: str +    badge_bug_hunter_level_2: str +    badge_early_supporter: str +    badge_hypesquad: str +    badge_hypesquad_balance: str      badge_hypesquad_bravery: str      badge_hypesquad_brilliance: str -    badge_hypesquad_balance: str -    badge_early_supporter: str -    badge_bug_hunter_level_2: str +    badge_partner: str +    badge_staff: str      badge_verified_bot_developer: str +    defcon_disabled: str  # noqa: E704 +    defcon_enabled: str  # noqa: E704 +    defcon_updated: str  # noqa: E704 + +    failmail: str +      incident_actioned: str -    incident_unactioned: str      incident_investigating: str +    incident_unactioned: str + +    status_dnd: str +    status_idle: str +    status_offline: str +    status_online: str -    failmail: str      trashcan: str      bullet: str +    check_mark: str +    cross_mark: str      new: str      pencil: str -    cross_mark: str -    check_mark: str -    upvotes: str      comments: str +    upvotes: str      user: str      ok_hand: str @@ -320,6 +322,7 @@ class Icons(metaclass=YAMLGetter):      filtering: str +    green_checkmark: str      guild_update: str      hash_blurple: str @@ -330,38 +333,34 @@ class Icons(metaclass=YAMLGetter):      message_delete: str      message_edit: str +    pencil: str + +    questionmark: str + +    remind_blurple: str +    remind_green: str +    remind_red: str +      sign_in: str      sign_out: str +    superstarify: str +    unsuperstarify: str +      token_removed: str      user_ban: str -    user_unban: str -    user_update: str -      user_mute: str +    user_unban: str      user_unmute: str +    user_update: str      user_verified: str -      user_warn: str -    pencil: str - -    remind_blurple: str -    remind_green: str -    remind_red: str - -    questionmark: str - -    superstarify: str -    unsuperstarify: str -      voice_state_blue: str      voice_state_green: str      voice_state_red: str -    green_checkmark: str -  class CleanMessages(metaclass=YAMLGetter):      section = "bot" @@ -383,8 +382,8 @@ class Categories(metaclass=YAMLGetter):      subsection = "categories"      help_available: int -    help_in_use: int      help_dormant: int +    help_in_use: int      modmail: int      voice: int @@ -393,56 +392,67 @@ class Channels(metaclass=YAMLGetter):      section = "guild"      subsection = "channels" -    admin_announcements: int -    admin_spam: int -    admins: int -    admins_voice: int      announcements: int -    attachment_log: int -    big_brother_logs: int -    bot_commands: int      change_log: int -    code_help_chat_1: int -    code_help_chat_2: int -    code_help_voice_1: int -    code_help_voice_2: int -    cooldown: int -    defcon: int -    discord_py: int +    mailing_lists: int +    python_events: int +    python_news: int +    reddit: int +    user_event_announcements: int +      dev_contrib: int      dev_core: int      dev_log: int + +    meta: int +    python_general: int + +    cooldown: int + +    attachment_log: int      dm_log: int +    message_log: int +    mod_log: int +    user_log: int +    voice_log: int + +    off_topic_0: int +    off_topic_1: int +    off_topic_2: int + +    bot_commands: int +    discord_py: int      esoteric: int -    general_voice: int +    voice_gate: int + +    admins: int +    admin_spam: int +    defcon: int      helpers: int      incidents: int      incidents_archive: int -    mailing_lists: int -    message_log: int -    meta: int +    mods: int      mod_alerts: int -    mod_announcements: int -    mod_log: int      mod_spam: int -    mods: int -    off_topic_0: int -    off_topic_1: int -    off_topic_2: int      organisation: int -    python_general: int -    python_events: int -    python_news: int -    reddit: int + +    admin_announcements: int +    mod_announcements: int      staff_announcements: int + +    admins_voice: int +    code_help_voice_1: int +    code_help_voice_2: int +    general_voice: int      staff_voice: int + +    code_help_chat_1: int +    code_help_chat_2: int      staff_voice_chat: int -    talent_pool: int -    user_event_announcements: int -    user_log: int      voice_chat: int -    voice_gate: int -    voice_log: int + +    big_brother_logs: int +    talent_pool: int  class Webhooks(metaclass=YAMLGetter): @@ -462,41 +472,44 @@ class Roles(metaclass=YAMLGetter):      section = "guild"      subsection = "roles" -    admins: int      announcements: int      contributors: int -    core_developers: int      help_cooldown: int -    helpers: int -    jammers: int -    moderators: int      muted: int -    owners: int      partners: int      python_community: int      sprinters: int -    team_leaders: int      voice_verified: int +    admins: int +    core_developers: int +    helpers: int +    moderators: int +    owners: int + +    jammers: int +    team_leaders: int +  class Guild(metaclass=YAMLGetter):      section = "guild"      id: int      invite: str  # Discord invite, gets embedded in chat -    moderation_channels: List[int] +      moderation_categories: List[int] -    moderation_roles: List[int] +    moderation_channels: List[int]      modlog_blacklist: List[int]      reminder_whitelist: List[int] +    moderation_roles: List[int]      staff_roles: List[int]  class Keys(metaclass=YAMLGetter):      section = "keys" -    site_api: Optional[str]      github: Optional[str] +    site_api: Optional[str]  class URLs(metaclass=YAMLGetter): @@ -526,9 +539,9 @@ class URLs(metaclass=YAMLGetter):  class Reddit(metaclass=YAMLGetter):      section = "reddit" -    subreddits: list      client_id: Optional[str]      secret: Optional[str] +    subreddits: list  class AntiSpam(metaclass=YAMLGetter): @@ -544,8 +557,8 @@ class AntiSpam(metaclass=YAMLGetter):  class BigBrother(metaclass=YAMLGetter):      section = 'big_brother' -    log_delay: int      header_message_limit: int +    log_delay: int  class CodeBlock(metaclass=YAMLGetter): @@ -561,8 +574,8 @@ class Free(metaclass=YAMLGetter):      section = 'free'      activity_timeout: int -    cooldown_rate: int      cooldown_per: float +    cooldown_rate: int  class HelpChannels(metaclass=YAMLGetter): @@ -585,25 +598,25 @@ class HelpChannels(metaclass=YAMLGetter):  class RedirectOutput(metaclass=YAMLGetter):      section = 'redirect_output' -    delete_invocation: bool      delete_delay: int +    delete_invocation: bool  class PythonNews(metaclass=YAMLGetter):      section = 'python_news' -    mail_lists: List[str]      channel: int      webhook: int +    mail_lists: List[str]  class VoiceGate(metaclass=YAMLGetter):      section = "voice_gate" -    minimum_days_member: int -    minimum_messages: int      bot_message_delete_delay: int      minimum_activity_blocks: int +    minimum_days_member: int +    minimum_messages: int      voice_ping_delete_delay: int diff --git a/config-default.yml b/config-default.yml index 6695cffed..d3b267159 100644 --- a/config-default.yml +++ b/config-default.yml @@ -1,74 +1,75 @@  bot:      prefix:      "!" -    token:       !ENV "BOT_TOKEN"      sentry_dsn:  !ENV "BOT_SENTRY_DSN" +    token:       !ENV "BOT_TOKEN" + +    clean: +        # Maximum number of messages to traverse for clean commands +        message_limit: 10000 + +    cooldowns: +        # Per channel, per tag. +        tags: 60      redis:          host:  "redis.default.svc.cluster.local" -        port:  6379          password: !ENV "REDIS_PASSWORD" +        port:  6379          use_fakeredis: false      stats: -        statsd_host: "graphite.default.svc.cluster.local"          presence_update_timeout: 300 - -    cooldowns: -        # Per channel, per tag. -        tags: 60 - -    clean: -        # Maximum number of messages to traverse for clean commands -        message_limit: 10000 +        statsd_host: "graphite.default.svc.cluster.local"  style:      colours: -        soft_red: 0xcd6d6d +        bright_green: 0x01d277          soft_green: 0x68c290          soft_orange: 0xf9cb54 -        bright_green: 0x01d277 +        soft_red: 0xcd6d6d          orange: 0xe67e22          pink: 0xcf84e0          purple: 0xb734eb      emojis: -        defcon_disabled: "<:defcondisabled:470326273952972810>" -        defcon_enabled:  "<:defconenabled:470326274213150730>" -        defcon_updated:  "<:defconsettingsupdated:470326274082996224>" - -        status_online:  "<:status_online:470326272351010816>" -        status_idle:    "<:status_idle:470326266625785866>" -        status_dnd:     "<:status_dnd:470326272082313216>" -        status_offline: "<:status_offline:470326266537705472>" - -        badge_staff: "<:discord_staff:743882896498098226>" -        badge_partner: "<:partner:748666453242413136>" -        badge_hypesquad: "<:hypesquad_events:743882896892362873>"          badge_bug_hunter: "<:bug_hunter_lvl1:743882896372269137>" +        badge_bug_hunter_level_2: "<:bug_hunter_lvl2:743882896611344505>" +        badge_early_supporter: "<:early_supporter:743882896909140058>" +        badge_hypesquad: "<:hypesquad_events:743882896892362873>" +        badge_hypesquad_balance: "<:hypesquad_balance:743882896460480625>"          badge_hypesquad_bravery: "<:hypesquad_bravery:743882896745693335>"          badge_hypesquad_brilliance: "<:hypesquad_brilliance:743882896938631248>" -        badge_hypesquad_balance: "<:hypesquad_balance:743882896460480625>" -        badge_early_supporter: "<:early_supporter:743882896909140058>" -        badge_bug_hunter_level_2: "<:bug_hunter_lvl2:743882896611344505>" +        badge_partner: "<:partner:748666453242413136>" +        badge_staff: "<:discord_staff:743882896498098226>"          badge_verified_bot_developer: "<:verified_bot_dev:743882897299210310>" -        incident_actioned:      "<:incident_actioned:719645530128646266>" -        incident_unactioned:    "<:incident_unactioned:719645583245180960>" -        incident_investigating: "<:incident_investigating:719645658671480924>" +        defcon_disabled: "<:defcondisabled:470326273952972810>" +        defcon_enabled:  "<:defconenabled:470326274213150730>" +        defcon_updated:  "<:defconsettingsupdated:470326274082996224>"          failmail: "<:failmail:633660039931887616>" + +        incident_actioned: "<:incident_actioned:719645530128646266>" +        incident_investigating: "<:incident_investigating:719645658671480924>" +        incident_unactioned: "<:incident_unactioned:719645583245180960>" + +        status_dnd:     "<:status_dnd:470326272082313216>" +        status_idle:    "<:status_idle:470326266625785866>" +        status_offline: "<:status_offline:470326266537705472>" +        status_online:  "<:status_online:470326272351010816>" +          trashcan: "<:trashcan:637136429717389331>"          bullet:     "\u2022" -        pencil:     "\u270F" -        new:        "\U0001F195" -        cross_mark: "\u274C"          check_mark: "\u2705" +        cross_mark: "\u274C" +        new:        "\U0001F195" +        pencil:     "\u270F"          # emotes used for #reddit -        upvotes:        "<:reddit_upvotes:755845219890757644>"          comments:       "<:reddit_comments:755845255001014384>" +        upvotes:        "<:reddit_upvotes:755845219890757644>"          user:           "<:reddit_users:755845303822974997>"          ok_hand: ":ok_hand:" @@ -85,6 +86,7 @@ style:          filtering: "https://cdn.discordapp.com/emojis/472472638594482195.png" +        green_checkmark: "https://raw.githubusercontent.com/python-discord/branding/master/icons/checkmark/green-checkmark-dist.png"          guild_update: "https://cdn.discordapp.com/emojis/469954765141442561.png"          hash_blurple: "https://cdn.discordapp.com/emojis/469950142942806017.png" @@ -95,38 +97,34 @@ style:          message_delete:      "https://cdn.discordapp.com/emojis/472472641320648704.png"          message_edit:        "https://cdn.discordapp.com/emojis/472472638976163870.png" +        pencil: "https://cdn.discordapp.com/emojis/470326272401211415.png" + +        questionmark: "https://cdn.discordapp.com/emojis/512367613339369475.png" + +        remind_blurple: "https://cdn.discordapp.com/emojis/477907609215827968.png" +        remind_green: "https://cdn.discordapp.com/emojis/477907607785570310.png" +        remind_red: "https://cdn.discordapp.com/emojis/477907608057937930.png" +          sign_in:  "https://cdn.discordapp.com/emojis/469952898181234698.png"          sign_out: "https://cdn.discordapp.com/emojis/469952898089091082.png" +        superstarify: "https://cdn.discordapp.com/emojis/636288153044516874.png" +        unsuperstarify: "https://cdn.discordapp.com/emojis/636288201258172446.png" +          token_removed: "https://cdn.discordapp.com/emojis/470326273298792469.png"          user_ban:    "https://cdn.discordapp.com/emojis/469952898026045441.png" -        user_unban:  "https://cdn.discordapp.com/emojis/469952898692808704.png" -        user_update: "https://cdn.discordapp.com/emojis/469952898684551168.png" -          user_mute:     "https://cdn.discordapp.com/emojis/472472640100106250.png" +        user_unban:  "https://cdn.discordapp.com/emojis/469952898692808704.png"          user_unmute:   "https://cdn.discordapp.com/emojis/472472639206719508.png" +        user_update: "https://cdn.discordapp.com/emojis/469952898684551168.png"          user_verified: "https://cdn.discordapp.com/emojis/470326274519334936.png" -          user_warn: "https://cdn.discordapp.com/emojis/470326274238447633.png" -        pencil: "https://cdn.discordapp.com/emojis/470326272401211415.png" - -        remind_blurple: "https://cdn.discordapp.com/emojis/477907609215827968.png" -        remind_green:   "https://cdn.discordapp.com/emojis/477907607785570310.png" -        remind_red:     "https://cdn.discordapp.com/emojis/477907608057937930.png" - -        questionmark: "https://cdn.discordapp.com/emojis/512367613339369475.png" - -        superstarify: "https://cdn.discordapp.com/emojis/636288153044516874.png" -        unsuperstarify: "https://cdn.discordapp.com/emojis/636288201258172446.png" -          voice_state_blue: "https://cdn.discordapp.com/emojis/656899769662439456.png"          voice_state_green: "https://cdn.discordapp.com/emojis/656899770094452754.png"          voice_state_red: "https://cdn.discordapp.com/emojis/656899769905709076.png" -        green_checkmark: "https://raw.githubusercontent.com/python-discord/branding/master/icons/checkmark/green-checkmark-dist.png" -  guild:      id: 267624335836053506 @@ -134,19 +132,19 @@ guild:      categories:          help_available:                     691405807388196926 -        help_in_use:                        696958401460043776          help_dormant:                       691405908919451718 -        modmail:            &MODMAIL        714494672835444826 +        help_in_use:                        696958401460043776          logs:               &LOGS           468520609152892958 +        modmail:            &MODMAIL        714494672835444826          voice:                              356013253765234688      channels:          # Public announcement and news channels -        change_log:                 &CHANGE_LOG         748238795236704388          announcements:              &ANNOUNCEMENTS      354619224620138496 -        python_news:                &PYNEWS_CHANNEL     704372456592506880 -        python_events:              &PYEVENTS_CHANNEL   729674110270963822 +        change_log:                 &CHANGE_LOG         748238795236704388          mailing_lists:              &MAILING_LISTS      704372456592506880 +        python_events:              &PYEVENTS_CHANNEL   729674110270963822 +        python_news:                &PYNEWS_CHANNEL     704372456592506880          reddit:                     &REDDIT_CHANNEL     458224812528238616          user_event_announcements:   &USER_EVENT_A       592000283102674944 @@ -167,11 +165,11 @@ guild:          # Logs          attachment_log:     &ATTACH_LOG     649243850006855680 +        dm_log:                             653713721625018428          message_log:        &MESSAGE_LOG    467752170159079424          mod_log:            &MOD_LOG        282638479504965634          user_log:                           528976905546760203          voice_log:                          640292421988646961 -        dm_log:                             653713721625018428          # Off-topic          off_topic_0:    291284109232308226 @@ -187,22 +185,22 @@ guild:          admins:             &ADMINS         365960823622991872          admin_spam:         &ADMIN_SPAM     563594791770914816          defcon:             &DEFCON         464469101889454091 +        duck_pond:          &DUCK_POND      637820308341915648          helpers:            &HELPERS        385474242440986624          incidents:                          714214212200562749          incidents_archive:                  720668923636351037          mods:               &MODS           305126844661760000          mod_alerts:                         473092532147060736 +        mod_meta:           &MOD_META       775412552795947058          mod_spam:           &MOD_SPAM       620607373828030464          mod_tools:          &MOD_TOOLS      775413915391098921 -        mod_meta:           &MOD_META       775412552795947058          organisation:       &ORGANISATION   551789653284356126          staff_lounge:       &STAFF_LOUNGE   464905259261755392 -        duck_pond:          &DUCK_POND      637820308341915648          # Staff announcement channels -        staff_announcements:    &STAFF_ANNOUNCEMENTS    464033278631084042 -        mod_announcements:      &MOD_ANNOUNCEMENTS      372115205867700225          admin_announcements:    &ADMIN_ANNOUNCEMENTS    749736155569848370 +        mod_announcements:      &MOD_ANNOUNCEMENTS      372115205867700225 +        staff_announcements:    &STAFF_ANNOUNCEMENTS    464033278631084042          # Voice Channels          admins_voice:       &ADMINS_VOICE   500734494840717332 @@ -254,7 +252,6 @@ guild:          partners:                               323426753857191936          python_community:   &PY_COMMUNITY_ROLE  458226413825294336          sprinters:          &SPRINTERS          758422482289426471 -          voice_verified:                         764802720779337729          # Staff @@ -269,15 +266,15 @@ guild:          team_leaders:   737250302834638889      moderation_roles: -        - *OWNERS_ROLE          - *ADMINS_ROLE          - *MODS_ROLE +        - *OWNERS_ROLE      staff_roles: -        - *OWNERS_ROLE          - *ADMINS_ROLE -        - *MODS_ROLE          - *HELPERS_ROLE +        - *MODS_ROLE +        - *OWNERS_ROLE      webhooks:          big_brother:                        569133704568373283 @@ -292,47 +289,47 @@ guild:  filter:      # What do we filter? -    filter_zalgo:          false -    filter_invites:        true      filter_domains:        true      filter_everyone_ping:  true +    filter_invites:        true +    filter_zalgo:          false      watch_regex:           true      watch_rich_embeds:     true      # Notify user on filter?      # Notifications are not expected for "watchlist" type filters -    notify_user_zalgo:          false -    notify_user_invites:        true      notify_user_domains:        false      notify_user_everyone_ping:  true +    notify_user_invites:        true +    notify_user_zalgo:          false      # Filter configuration -    ping_everyone:             true      offensive_msg_delete_days: 7     # How many days before deleting an offensive message? +    ping_everyone:             true      # Censor doesn't apply to these      channel_whitelist:          - *ADMINS -        - *MOD_LOG -        - *MESSAGE_LOG -        - *DEV_LOG          - *BB_LOGS +        - *DEV_LOG +        - *MESSAGE_LOG +        - *MOD_LOG          - *STAFF_LOUNGE          - *TALENT_POOL          - *USER_EVENT_A      role_whitelist:          - *ADMINS_ROLE +        - *HELPERS_ROLE          - *MODS_ROLE          - *OWNERS_ROLE -        - *HELPERS_ROLE          - *PY_COMMUNITY_ROLE          - *SPRINTERS  keys: -    site_api:    !ENV "BOT_API_KEY"      github:      !ENV "GITHUB_API_KEY" +    site_api:    !ENV "BOT_API_KEY"  urls: @@ -340,11 +337,11 @@ urls:      site:        &DOMAIN       "pythondiscord.com"      site_api:    &API    !JOIN ["api.", *DOMAIN]      site_paste:  &PASTE  !JOIN ["paste.", *DOMAIN] -    site_staff:  &STAFF  !JOIN ["staff.", *DOMAIN]      site_schema: &SCHEMA       "https://" +    site_staff:  &STAFF  !JOIN ["staff.", *DOMAIN] -    site_logs_view:                     !JOIN [*SCHEMA, *STAFF, "/bot/logs"]      paste_service:                      !JOIN [*SCHEMA, *PASTE, "/{key}"] +    site_logs_view:                     !JOIN [*SCHEMA, *STAFF, "/bot/logs"]      # Snekbox      snekbox_eval_api: "http://snekbox.default.svc.cluster.local/eval" @@ -364,8 +361,8 @@ anti_spam:      ping_everyone: true      punishment: -        role_id: *MUTED_ROLE          remove_after: 600 +        role_id: *MUTED_ROLE      rules:          attachments: @@ -388,14 +385,14 @@ anti_spam:              interval: 5              max: 3_000 -        duplicates: -            interval: 10 -            max: 3 -          discord_emojis:              interval: 10              max: 20 +        duplicates: +            interval: 10 +            max: 3 +          links:              interval: 10              max: 10 @@ -415,15 +412,15 @@ anti_spam:  reddit: +    client_id: !ENV "REDDIT_CLIENT_ID" +    secret: !ENV "REDDIT_SECRET"      subreddits:          - 'r/Python' -    client_id: !ENV "REDDIT_CLIENT_ID" -    secret:    !ENV "REDDIT_SECRET"  big_brother: -    log_delay: 15      header_message_limit: 15 +    log_delay: 15  code_block: @@ -447,8 +444,8 @@ free:      # Seconds to elapse for a channel      # to be considered inactive.      activity_timeout: 600 -    cooldown_rate: 1      cooldown_per: 60.0 +    cooldown_rate: 1  help_channels: @@ -493,8 +490,8 @@ help_channels:  redirect_output: -    delete_invocation: true      delete_delay: 15 +    delete_invocation: true  duck_pond: @@ -514,20 +511,21 @@ duck_pond:  python_news: +    channel: *PYNEWS_CHANNEL +    webhook: *PYNEWS_WEBHOOK +      mail_lists:          - 'python-ideas'          - 'python-announce-list'          - 'pypi-announce'          - 'python-dev' -    channel: *PYNEWS_CHANNEL -    webhook: *PYNEWS_WEBHOOK  voice_gate: -    minimum_days_member: 3  # How many days the user must have been a member for -    minimum_messages: 50  # How many messages a user must have to be eligible for voice      bot_message_delete_delay: 10  # Seconds before deleting bot's response in Voice Gate      minimum_activity_blocks: 3  # Number of 10 minute blocks during which a user must have been active +    minimum_days_member: 3  # How many days the user must have been a member for +    minimum_messages: 50  # How many messages a user must have to be eligible for voice      voice_ping_delete_delay: 60  # Seconds before deleting the bot's ping to user in Voice Gate | 
