Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 31 Dec 2020 19:52:45 +0000 (UTC)
From:      Kurt Jaeger <pi@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r559769 - in head/games: . automuteus automuteus/files
Message-ID:  <202012311952.0BVJqjST067778@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: pi
Date: Thu Dec 31 19:52:45 2020
New Revision: 559769
URL: https://svnweb.freebsd.org/changeset/ports/559769

Log:
  New port: games/automuteus
  
  AutoMuteUs is a Discord Bot to harness Among Us game data, and automatically
  mute/unmute players during games!
  
  Requires amonguscapture to capture and relay game data.
  
  WWW: https://automute.us/
  
  PR:		252314
  Submitted by:	Neel Chauhan <neel@neelc.org>

Added:
  head/games/automuteus/
  head/games/automuteus/Makefile   (contents, props changed)
  head/games/automuteus/distinfo   (contents, props changed)
  head/games/automuteus/files/
  head/games/automuteus/files/automuteus.in   (contents, props changed)
  head/games/automuteus/files/config.txt   (contents, props changed)
  head/games/automuteus/files/patch-main.go   (contents, props changed)
  head/games/automuteus/files/pkg-message.in   (contents, props changed)
  head/games/automuteus/pkg-descr   (contents, props changed)
Modified:
  head/games/Makefile

Modified: head/games/Makefile
==============================================================================
--- head/games/Makefile	Thu Dec 31 19:17:54 2020	(r559768)
+++ head/games/Makefile	Thu Dec 31 19:52:45 2020	(r559769)
@@ -67,6 +67,7 @@
     SUBDIR += atris
     SUBDIR += atris-sounds
     SUBDIR += auralquiz
+    SUBDIR += automuteus
     SUBDIR += avanor
     SUBDIR += avoision
     SUBDIR += avp

Added: head/games/automuteus/Makefile
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/games/automuteus/Makefile	Thu Dec 31 19:52:45 2020	(r559769)
@@ -0,0 +1,73 @@
+# $FreeBSD$
+
+PORTNAME=	automuteus
+DISTVERSION=	6.7.1
+CATEGORIES=	games
+
+MAINTAINER=	neel@neelc.org
+COMMENT=	Discord Bot to automute Among Us players at round transitions
+
+LICENSE=	MIT
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+USES=		go:modules
+USE_RC_SUBR=	${PORTNAME}
+SUB_FILES=	pkg-message
+
+GO_PKGNAME=	github.com/${GH_ACCOUNT}/${PORTNAME}
+GO_TARGET=	.:${PORTNAME}
+
+USE_GITHUB=	yes
+GH_ACCOUNT=	denverquane
+
+GH_TUPLE=	\
+		BurntSushi:toml:v0.3.1:burntsushi_toml/vendor/github.com/BurntSushi/toml \
+		automuteus:galactus:v1.2.2:automuteus_galactus/vendor/github.com/automuteus/galactus \
+		automuteus:utils:v0.0.5:automuteus_utils/vendor/github.com/automuteus/utils \
+		beorn7:perks:v1.0.1:beorn7_perks/vendor/github.com/beorn7/perks \
+		bsm:redislock:v0.7.0:bsm_redislock/vendor/github.com/bsm/redislock \
+		cespare:xxhash:v2.1.1:cespare_xxhash_v2/vendor/github.com/cespare/xxhash/v2 \
+		davecgh:go-spew:v1.1.1:davecgh_go_spew/vendor/github.com/davecgh/go-spew \
+		denverquane:discordgo:v0.24.1:denverquane_discordgo/vendor/github.com/bwmarrin/discordgo \
+		dgryski:go-rendezvous:9f7001d12a5f:dgryski_go_rendezvous/vendor/github.com/dgryski/go-rendezvous \
+		georgysavva:scany:v0.2.7:georgysavva_scany/vendor/github.com/georgysavva/scany \
+		go-redis:redis:v8.4.4:go_redis_redis_v8/vendor/github.com/go-redis/redis/v8 \
+		go-yaml:yaml:9f266ea9e77c:go_yaml_yaml/vendor/gopkg.in/yaml.v3 \
+		golang:crypto:0c6587e931a9:golang_crypto/vendor/golang.org/x/crypto \
+		golang:protobuf:v1.4.3:golang_protobuf/vendor/github.com/golang/protobuf \
+		golang:sys:0a15ea8d9b02:golang_sys/vendor/golang.org/x/sys \
+		golang:text:v0.3.4:golang_text/vendor/golang.org/x/text \
+		golang:xerrors:5ec99f83aff1:golang_xerrors/vendor/golang.org/x/xerrors \
+		googollee:go-socket.io:v1.4.4:googollee_go_socket_io/vendor/github.com/googollee/go-socket.io \
+		gorilla:mux:v1.8.0:gorilla_mux/vendor/github.com/gorilla/mux \
+		gorilla:websocket:v1.4.2:gorilla_websocket/vendor/github.com/gorilla/websocket \
+		jackc:chunkreader:v2.0.1:jackc_chunkreader_v2/vendor/github.com/jackc/chunkreader/v2 \
+		jackc:pgconn:v1.8.0:jackc_pgconn/vendor/github.com/jackc/pgconn \
+		jackc:pgio:v1.0.0:jackc_pgio/vendor/github.com/jackc/pgio \
+		jackc:pgpassfile:v1.0.0:jackc_pgpassfile/vendor/github.com/jackc/pgpassfile \
+		jackc:pgproto3:v2.0.6:jackc_pgproto3_v2/vendor/github.com/jackc/pgproto3/v2 \
+		jackc:pgservicefile:2b9c44734f2b:jackc_pgservicefile/vendor/github.com/jackc/pgservicefile \
+		jackc:pgtype:v1.6.2:jackc_pgtype/vendor/github.com/jackc/pgtype \
+		jackc:pgx:v4.10.0:jackc_pgx_v4/vendor/github.com/jackc/pgx/v4 \
+		jackc:puddle:v1.1.3:jackc_puddle/vendor/github.com/jackc/puddle \
+		joho:godotenv:v1.3.0:joho_godotenv/vendor/github.com/joho/godotenv \
+		matttproud:golang_protobuf_extensions:v1.0.1:matttproud_golang_protobuf_extensions/vendor/github.com/matttproud/golang_protobuf_extensions \
+		nicksnyder:go-i18n:v2.1.1:nicksnyder_go_i18n_v2/vendor/github.com/nicksnyder/go-i18n \
+		open-telemetry:opentelemetry-go:v0.15.0:open_telemetry_opentelemetry_go/vendor/go.opentelemetry.io/otel \
+		pkg:errors:v0.9.1:pkg_errors/vendor/github.com/pkg/errors \
+		pmezard:go-difflib:v1.0.0:pmezard_go_difflib/vendor/github.com/pmezard/go-difflib \
+		prometheus:client_golang:v1.8.0:prometheus_client_golang/vendor/github.com/prometheus/client_golang \
+		prometheus:client_model:v0.2.0:prometheus_client_model/vendor/github.com/prometheus/client_model \
+		prometheus:common:v0.14.0:prometheus_common/vendor/github.com/prometheus/common \
+		prometheus:procfs:v0.2.0:prometheus_procfs/vendor/github.com/prometheus/procfs \
+		protocolbuffers:protobuf-go:v1.25.0:protocolbuffers_protobuf_go/vendor/google.golang.org/protobuf \
+		stretchr:objx:v0.2.0:stretchr_objx/vendor/github.com/stretchr/objx \
+		stretchr:testify:v1.6.1:stretchr_testify/vendor/github.com/stretchr/testify
+
+PLIST_FILES=	bin/${PORTNAME} etc/${PORTNAME}/config.txt
+
+post-install:
+	@${MKDIR} ${STAGEDIR}${PREFIX}/etc/automuteus
+	@${CP} ${FILESDIR}/config.txt ${STAGEDIR}${PREFIX}/etc/automuteus
+
+.include <bsd.port.mk>

Added: head/games/automuteus/distinfo
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/games/automuteus/distinfo	Thu Dec 31 19:52:45 2020	(r559769)
@@ -0,0 +1,87 @@
+TIMESTAMP = 1609439073
+SHA256 (denverquane-automuteus-6.7.1_GH0.tar.gz) = 430d32ffc5cadb413e6026bd3ab819eab8cdf8c884a3a6e5f2c82b1dcf4cd5cb
+SIZE (denverquane-automuteus-6.7.1_GH0.tar.gz) = 8894935
+SHA256 (BurntSushi-toml-v0.3.1_GH0.tar.gz) = 6593da894578ba510a470735ffbdc88ce88033094dc5a8f4d3957ab87e18803f
+SIZE (BurntSushi-toml-v0.3.1_GH0.tar.gz) = 42077
+SHA256 (automuteus-galactus-v1.2.2_GH0.tar.gz) = 5296c340a199c26ac7a0ead52c91aed7c6e087fae8000022abb27119686ea2ce
+SIZE (automuteus-galactus-v1.2.2_GH0.tar.gz) = 16722
+SHA256 (automuteus-utils-v0.0.5_GH0.tar.gz) = ca436d78679d9d84bfeeb823993eacdb8297bf6466abd03f9c1aa7cdd883601e
+SIZE (automuteus-utils-v0.0.5_GH0.tar.gz) = 17215
+SHA256 (beorn7-perks-v1.0.1_GH0.tar.gz) = 98db84bb0224a26094e6adba91b7ee7a1a7ace28cb648d818f8e779e6a19f825
+SIZE (beorn7-perks-v1.0.1_GH0.tar.gz) = 10867
+SHA256 (bsm-redislock-v0.7.0_GH0.tar.gz) = a4ed6616ffb450ba08e3033e758dbe13192dac3fcbbfc1e0802aa829f31b06b4
+SIZE (bsm-redislock-v0.7.0_GH0.tar.gz) = 10575
+SHA256 (cespare-xxhash-v2.1.1_GH0.tar.gz) = 0ee31178d2c5a1249be4e26294a2f428008dc4e1ecbbfbe47f74e41026df1148
+SIZE (cespare-xxhash-v2.1.1_GH0.tar.gz) = 9292
+SHA256 (davecgh-go-spew-v1.1.1_GH0.tar.gz) = 7d82b9bb7291adbe7498fe946920ab3e7fc9e6cbfc3b2294693fad00bf0dd17e
+SIZE (davecgh-go-spew-v1.1.1_GH0.tar.gz) = 42152
+SHA256 (denverquane-discordgo-v0.24.1_GH0.tar.gz) = 2e526fa068328c7a5f50ad9e25032f52223fcd1b4ed0d2d42052dfdf964bd25a
+SIZE (denverquane-discordgo-v0.24.1_GH0.tar.gz) = 134923
+SHA256 (dgryski-go-rendezvous-9f7001d12a5f_GH0.tar.gz) = 29584550745fd4b8fce2e2f3def7b9d9ffe2b86cf9b6596b53a660c9bbfe27b6
+SIZE (dgryski-go-rendezvous-9f7001d12a5f_GH0.tar.gz) = 1699
+SHA256 (georgysavva-scany-v0.2.7_GH0.tar.gz) = 4001eac92cfcd07ceff2bfec21d1b7174ce06371de6f273050287cb7cb3f94e1
+SIZE (georgysavva-scany-v0.2.7_GH0.tar.gz) = 27811
+SHA256 (go-redis-redis-v8.4.4_GH0.tar.gz) = 19f47bc7e367a001b6446534f96cddcdde07c4e78dce4f39c3e269a500eea716
+SIZE (go-redis-redis-v8.4.4_GH0.tar.gz) = 128214
+SHA256 (go-yaml-yaml-9f266ea9e77c_GH0.tar.gz) = 63efc9aabcbb56b2c9469927784fd67ecb3a79720c4fa754c511335a04156d04
+SIZE (go-yaml-yaml-9f266ea9e77c_GH0.tar.gz) = 86898
+SHA256 (golang-crypto-0c6587e931a9_GH0.tar.gz) = e9c562f4a379e1b92ed0e58f2a21240409b1b98cca291d1b9a0bc650777b6cd1
+SIZE (golang-crypto-0c6587e931a9_GH0.tar.gz) = 1732705
+SHA256 (golang-protobuf-v1.4.3_GH0.tar.gz) = 5736f943f8647362f5559689df6154f3c85d261fb088867c8a68494e2a767610
+SIZE (golang-protobuf-v1.4.3_GH0.tar.gz) = 171969
+SHA256 (golang-sys-0a15ea8d9b02_GH0.tar.gz) = 61b4693f63a09ff511eb1b14f4bac4ba442c9c959888220b7d57c88e08729ed7
+SIZE (golang-sys-0a15ea8d9b02_GH0.tar.gz) = 1086469
+SHA256 (golang-text-v0.3.4_GH0.tar.gz) = 39eabfef83413361eafd4353ee9d9821707853235f2e55f3d5b1d38ce698fe89
+SIZE (golang-text-v0.3.4_GH0.tar.gz) = 8354508
+SHA256 (golang-xerrors-5ec99f83aff1_GH0.tar.gz) = 71975d658357e170fd6a41f92539cde8b39c9cd8bfe5931b6311bc5f5c0da0d7
+SIZE (golang-xerrors-5ec99f83aff1_GH0.tar.gz) = 13664
+SHA256 (googollee-go-socket.io-v1.4.4_GH0.tar.gz) = c695d555e1303d024c777a095697c6d7727b1ca45d506ae103815801f3343268
+SIZE (googollee-go-socket.io-v1.4.4_GH0.tar.gz) = 54082
+SHA256 (gorilla-mux-v1.8.0_GH0.tar.gz) = ea2639259d2ce6f402636655e91eb93ba69c139e3cbf80b044ee393ada53757b
+SIZE (gorilla-mux-v1.8.0_GH0.tar.gz) = 45517
+SHA256 (gorilla-websocket-v1.4.2_GH0.tar.gz) = 91937a36bc9e0da3c895c73d4cb74b2cdb1aff54ab21b0d0724000e7b5b85b84
+SIZE (gorilla-websocket-v1.4.2_GH0.tar.gz) = 54101
+SHA256 (jackc-chunkreader-v2.0.1_GH0.tar.gz) = bf856bad6608fb7345707aba713a1d77eb984f1d217065738a12c97e37669be4
+SIZE (jackc-chunkreader-v2.0.1_GH0.tar.gz) = 3038
+SHA256 (jackc-pgconn-v1.8.0_GH0.tar.gz) = 905e72f29915417ace187a86e2babdf6aea0812d84581ccdcc67dc4ecb4060bf
+SIZE (jackc-pgconn-v1.8.0_GH0.tar.gz) = 50867
+SHA256 (jackc-pgio-v1.0.0_GH0.tar.gz) = d36e367c877954acdc96b8cd1a0df417b4cfae80dae726474a8f0de3a68a68ab
+SIZE (jackc-pgio-v1.0.0_GH0.tar.gz) = 1884
+SHA256 (jackc-pgpassfile-v1.0.0_GH0.tar.gz) = df8904662382e1d0064ec7a5a8c36c49264d7128cea923d597802ada8c5b9603
+SIZE (jackc-pgpassfile-v1.0.0_GH0.tar.gz) = 3254
+SHA256 (jackc-pgproto3-v2.0.6_GH0.tar.gz) = 3d345e52e8414937255bdd795d9e97413dd3c52216c7cb3e273d5ef94f92f097
+SIZE (jackc-pgproto3-v2.0.6_GH0.tar.gz) = 16872
+SHA256 (jackc-pgservicefile-2b9c44734f2b_GH0.tar.gz) = dd6cf77deb2456b1c8e56875ed901a57eb887e63ae5de48f364906131275497e
+SIZE (jackc-pgservicefile-2b9c44734f2b_GH0.tar.gz) = 2991
+SHA256 (jackc-pgtype-v1.6.2_GH0.tar.gz) = 143c7e4b58451348a8b57ee13e74a1ae2c7eb78279af065745e82cadf2a37975
+SIZE (jackc-pgtype-v1.6.2_GH0.tar.gz) = 174708
+SHA256 (jackc-pgx-v4.10.0_GH0.tar.gz) = 53d7aa1015609dd3adb44fa73f11bbf4ed379b77429055338e73261d3b0a244b
+SIZE (jackc-pgx-v4.10.0_GH0.tar.gz) = 100674
+SHA256 (jackc-puddle-v1.1.3_GH0.tar.gz) = 6ce53fe368d6777b7aee47c2e2e0558d7089d08d23b311f4b84613ba08edc99b
+SIZE (jackc-puddle-v1.1.3_GH0.tar.gz) = 10317
+SHA256 (joho-godotenv-v1.3.0_GH0.tar.gz) = 07beb0bae964dbe37442603a404196111dbbbaaa986fc179d5d5fdc46ed6a189
+SIZE (joho-godotenv-v1.3.0_GH0.tar.gz) = 9941
+SHA256 (matttproud-golang_protobuf_extensions-v1.0.1_GH0.tar.gz) = 2def0ee6f6b12b1efc0e3007d89f598608a072610e805c3655ea9d13c3ead49b
+SIZE (matttproud-golang_protobuf_extensions-v1.0.1_GH0.tar.gz) = 37184
+SHA256 (nicksnyder-go-i18n-v2.1.1_GH0.tar.gz) = aaf654b09308c928c40a7e8739dd58ad559918a4c686dee5e8992fa74bf1b22b
+SIZE (nicksnyder-go-i18n-v2.1.1_GH0.tar.gz) = 40526
+SHA256 (open-telemetry-opentelemetry-go-v0.15.0_GH0.tar.gz) = c09057dc66e500a52304fd421c1c6a7718be0dd22f69a0bb8f3c230a26fbb24d
+SIZE (open-telemetry-opentelemetry-go-v0.15.0_GH0.tar.gz) = 471432
+SHA256 (pkg-errors-v0.9.1_GH0.tar.gz) = 56bfd893023daa498508bfe161de1be83299fcf15376035e7df79cbd7d6fa608
+SIZE (pkg-errors-v0.9.1_GH0.tar.gz) = 13415
+SHA256 (pmezard-go-difflib-v1.0.0_GH0.tar.gz) = 28f3dc1b5c0efd61203ab07233f774740d3bf08da4d8153fb5310db6cea0ebda
+SIZE (pmezard-go-difflib-v1.0.0_GH0.tar.gz) = 11398
+SHA256 (prometheus-client_golang-v1.8.0_GH0.tar.gz) = 90ffc935a71704c5c53c6a6f878a5195754a441267a338783fb747fb987714c3
+SIZE (prometheus-client_golang-v1.8.0_GH0.tar.gz) = 175641
+SHA256 (prometheus-client_model-v0.2.0_GH0.tar.gz) = 4ab1be9cdfa702d7f49beeb09a256bcc6a2aad55e8a0a37e7732a46934264e12
+SIZE (prometheus-client_model-v0.2.0_GH0.tar.gz) = 10986
+SHA256 (prometheus-common-v0.14.0_GH0.tar.gz) = 1b93e29dd621ed22bb7a7351487e22013f43c96d05c6c63ffc11236abe166f36
+SIZE (prometheus-common-v0.14.0_GH0.tar.gz) = 124248
+SHA256 (prometheus-procfs-v0.2.0_GH0.tar.gz) = b6c013031ac8b9f8f9e1595103c48feb80dfe59c37aac73efe724fddbc0b3f50
+SIZE (prometheus-procfs-v0.2.0_GH0.tar.gz) = 157368
+SHA256 (protocolbuffers-protobuf-go-v1.25.0_GH0.tar.gz) = c1c04d6e36c0d0fb6f3374197f9025d7e6df13f38a974098be020617c00fbaf2
+SIZE (protocolbuffers-protobuf-go-v1.25.0_GH0.tar.gz) = 1258804
+SHA256 (stretchr-objx-v0.2.0_GH0.tar.gz) = be7dce02798cdc24cee6bd2d95bfcf6976b1521ef735349bf5e7dfe6d147746f
+SIZE (stretchr-objx-v0.2.0_GH0.tar.gz) = 79981
+SHA256 (stretchr-testify-v1.6.1_GH0.tar.gz) = 40fd7204ab72ca9d8759f1cc3604dd17f556a0f9177f6fc05dd0cad9f06e708f
+SIZE (stretchr-testify-v1.6.1_GH0.tar.gz) = 84215

Added: head/games/automuteus/files/automuteus.in
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/games/automuteus/files/automuteus.in	Thu Dec 31 19:52:45 2020	(r559769)
@@ -0,0 +1,39 @@
+#!/bin/sh
+#
+# $FreeBSD$
+#
+# PROVIDE: automuteus
+# REQUIRE: DAEMON FILESYSTEMS NETWORKING
+# KEYWORD: shutdown
+#
+# Add the following lines to /etc/rc.conf to enable automuteus.
+#
+#automuteus_enable="YES"
+
+. /etc/rc.subr
+
+name="automuteus"
+rcvar="automuteus_enable"
+
+load_rc_config $name
+
+: ${automuteus_enable:="NO"}
+: ${automuteus_conf:="%%PREFIX%%/etc/automuteus/config.txt"}
+: ${automuteus_log:="/var/log/automuteus.log"}
+
+command="%%PREFIX%%/bin/automuteus"
+pidfile=/var/run/${name}.pid
+start_cmd="automuteus_start"
+
+automuteus_start()
+{
+	check_startmsgs && echo "Starting ${name}."
+	/usr/sbin/daemon \
+		-p ${pidfile} \
+		/usr/bin/env \
+		"CONFIG_FILE=${automuteus_conf}" \
+		"LOG_PATH=${automuteus_log}" \
+		${command}
+}
+
+run_rc_command "$1"

Added: head/games/automuteus/files/config.txt
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/games/automuteus/files/config.txt	Thu Dec 31 19:52:45 2020	(r559769)
@@ -0,0 +1,2 @@
+DISCORD_BOT_TOKEN=
+BOT_LANG=en

Added: head/games/automuteus/files/patch-main.go
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/games/automuteus/files/patch-main.go	Thu Dec 31 19:52:45 2020	(r559769)
@@ -0,0 +1,19 @@
+--- main.go.orig	2020-12-29 06:50:50 UTC
++++ main.go
+@@ -43,10 +43,14 @@ func main() {
+ func discordMainWrapper() error {
+ 	err := godotenv.Load("final.txt")
+ 	if err != nil {
+-		err = godotenv.Load("config.txt")
++		cfn := os.Getenv("CONFIG_PATH")
++		if cfn == "" {
++			cfn = "config.txt"
++		}
++		err = godotenv.Load(cfn)
+ 		if err != nil && os.Getenv("DISCORD_BOT_TOKEN") == "" {
+ 			log.Println("Can't open config file and missing DISCORD_BOT_TOKEN; creating config.txt for you to use for your config")
+-			f, err := os.Create("config.txt")
++			f, err := os.Create(cfn)
+ 			if err != nil {
+ 				log.Println("Issue creating sample config.txt")
+ 				return err

Added: head/games/automuteus/files/pkg-message.in
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/games/automuteus/files/pkg-message.in	Thu Dec 31 19:52:45 2020	(r559769)
@@ -0,0 +1,16 @@
+[
+{ type: install
+  message: <<EOM
+To enable the automuteus server, set automuteus_enable="YES" in your
+/etc/rc.conf and set the DISCORD_BOT_TOKEN in 
+%%PREFIX%%/etc/automuteus/config.txt to your Discord bot token.
+
+Additional configuration options can be seen in the source code:
+
+https://github.com/denverquane/automuteus/blob/master/main.go
+
+The %%PREFIX%%/etc/rc.d/automuteus rc.subr script can override the config and
+log pathnames.
+EOM
+}
+]

Added: head/games/automuteus/pkg-descr
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/games/automuteus/pkg-descr	Thu Dec 31 19:52:45 2020	(r559769)
@@ -0,0 +1,6 @@
+AutoMuteUs is a Discord Bot to harness Among Us game data, and automatically
+mute/unmute players during games!
+
+Requires amonguscapture to capture and relay game data.
+
+WWW: https://automute.us/



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202012311952.0BVJqjST067778>