kopia lustrzana https://codeberg.org/nmkj/audon
add bot support
rodzic
ee9c1eda41
commit
aa93feca49
|
@ -28,3 +28,10 @@ LIVEKIT_API_SECRET=secret
|
|||
LIVEKIT_HOST=livekit.example.com
|
||||
# This value will be returned by Audon backend to browsers. Set the same domain as LIVEKIT_HOST if you are not sure.
|
||||
LIVEKIT_LOCAL_DOMAIN=livekit.example.com
|
||||
|
||||
### Bot Settings ###
|
||||
# Leave the following fields empty to disable the notification bot.
|
||||
BOT_SERVER=
|
||||
BOT_CLIENT_ID=
|
||||
BOT_CLIENT_SECRET=
|
||||
BOT_ACCESS_TOKEN=
|
||||
|
|
|
@ -29,6 +29,7 @@ form:
|
|||
cohosts: "Cohosts"
|
||||
cohostCanAlwaysJoin: "Cohosts can join regardless of this setting."
|
||||
schedule: "Schedule at"
|
||||
advertise: "Allow the bot ({bot}) to advertise your room"
|
||||
relationships:
|
||||
everyone: "Everyone"
|
||||
following: "Followed accounts only"
|
||||
|
|
|
@ -29,6 +29,7 @@ form:
|
|||
cohosts: "Cohôtes"
|
||||
cohostCanAlwaysJoin: "Cohôtes peuvent s'y joindre, quel que soit le paramètre de confidentialité."
|
||||
schedule: "Programmée à"
|
||||
advertise: "Autorisez le robot ({bot}) à faire de la publicité pour votre salle"
|
||||
relationships:
|
||||
everyone: "Tout le monde"
|
||||
following: "Vos abonnements"
|
||||
|
|
|
@ -28,6 +28,7 @@ form:
|
|||
cohosts: "共同ホスト"
|
||||
cohostCanAlwaysJoin: "共同ホストは制限に関わらず入室できます。"
|
||||
schedule: "開始予約"
|
||||
advertise: "Bot({bot})による部屋の宣伝を許可する"
|
||||
relationships:
|
||||
everyone: "制限なし"
|
||||
following: "あなたのフォロー限定"
|
||||
|
|
|
@ -65,6 +65,7 @@ export default {
|
|||
},
|
||||
isSubmissionLoading: false,
|
||||
createdRoomID: "",
|
||||
advertise: true,
|
||||
};
|
||||
},
|
||||
validations() {
|
||||
|
@ -121,6 +122,9 @@ export default {
|
|||
this.isCandiadateLoading = true;
|
||||
this.cohostSearch(val);
|
||||
},
|
||||
relationship(to) {
|
||||
this.advertise = to === "everyone";
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async search(val) {
|
||||
|
@ -172,6 +176,10 @@ export default {
|
|||
remote_url: u.url,
|
||||
})),
|
||||
restriction: this.relationship,
|
||||
advertise:
|
||||
this.advertise && this.relationship === "everyone"
|
||||
? this.$i18n.locale
|
||||
: "",
|
||||
};
|
||||
this.isSubmissionLoading = false;
|
||||
try {
|
||||
|
@ -364,10 +372,31 @@ export default {
|
|||
disabled
|
||||
:messages="[$t('comingFuture')]"
|
||||
></v-text-field>
|
||||
<v-checkbox
|
||||
v-model="advertise"
|
||||
:disabled="relationship !== 'everyone'"
|
||||
density="compact"
|
||||
>
|
||||
<template v-slot:label>
|
||||
<i18n-t keypath="form.advertise" tag="div">
|
||||
<template v-slot:bot>
|
||||
<a href="https://gts.audon.space/@now" target="_blank"
|
||||
>now@audon.space</a
|
||||
>
|
||||
</template>
|
||||
</i18n-t>
|
||||
</template>
|
||||
</v-checkbox>
|
||||
</v-form>
|
||||
</v-card-text>
|
||||
<v-card-actions>
|
||||
<v-btn block color="indigo" @click="onSubmit" variant="flat">
|
||||
<v-btn
|
||||
block
|
||||
:disabled="isSubmissionLoading"
|
||||
color="indigo"
|
||||
@click="onSubmit"
|
||||
variant="flat"
|
||||
>
|
||||
{{ $t("create") }}
|
||||
</v-btn>
|
||||
</v-card-actions>
|
||||
|
|
|
@ -84,15 +84,15 @@ export default {
|
|||
sounds: {
|
||||
boop: new Howl({
|
||||
src: [boopSound],
|
||||
volume: 0.4,
|
||||
volume: 0.7,
|
||||
}),
|
||||
message: new Howl({
|
||||
src: [messageSound],
|
||||
volume: 0.15,
|
||||
volume: 0.3,
|
||||
}),
|
||||
request: new Howl({
|
||||
src: [requestSound],
|
||||
volume: 0.4,
|
||||
volume: 0.7,
|
||||
})
|
||||
},
|
||||
};
|
||||
|
|
26
config.go
26
config.go
|
@ -14,6 +14,7 @@ type (
|
|||
MongoURL *url.URL
|
||||
Database *DBConfig
|
||||
Redis *RedisConfig
|
||||
Bot *BotConfig
|
||||
}
|
||||
|
||||
AppConfigBase struct {
|
||||
|
@ -41,6 +42,14 @@ type (
|
|||
User string `validate:"printascii"`
|
||||
Password string `validate:"printascii"`
|
||||
}
|
||||
|
||||
BotConfig struct {
|
||||
Enable bool
|
||||
Server *url.URL
|
||||
ClientID string
|
||||
ClientSecret string
|
||||
AccessToken string
|
||||
}
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -124,5 +133,22 @@ func loadConfig(envname string) (*AppConfig, error) {
|
|||
lkConf.URL = lkURL
|
||||
appConf.Livekit = lkConf
|
||||
|
||||
// Setup Notification Bot config
|
||||
botHost := os.Getenv("BOT_SERVER")
|
||||
botConf := &BotConfig{
|
||||
Enable: botHost != "",
|
||||
ClientID: os.Getenv("BOT_CLIENT_ID"),
|
||||
ClientSecret: os.Getenv("BOT_CLIENT_SECRET"),
|
||||
AccessToken: os.Getenv("BOT_ACCESS_TOKEN"),
|
||||
}
|
||||
if botConf.Enable {
|
||||
botConf.Server = &url.URL{
|
||||
Host: botHost,
|
||||
Scheme: "https",
|
||||
Path: "/",
|
||||
}
|
||||
}
|
||||
appConf.Bot = botConf
|
||||
|
||||
return &appConf, nil
|
||||
}
|
||||
|
|
7
go.mod
7
go.mod
|
@ -13,10 +13,13 @@ require (
|
|||
github.com/livekit/protocol v1.2.3
|
||||
github.com/livekit/server-sdk-go v1.0.5
|
||||
github.com/mattn/go-mastodon v0.0.6
|
||||
github.com/nicksnyder/go-i18n/v2 v2.2.1
|
||||
github.com/oklog/ulid/v2 v2.1.0
|
||||
github.com/pkg/errors v0.9.1
|
||||
github.com/rbcervilla/redisstore/v9 v9.0.0-rc1
|
||||
go.mongodb.org/mongo-driver v1.11.0
|
||||
golang.org/x/text v0.4.0
|
||||
gopkg.in/yaml.v3 v3.0.1
|
||||
)
|
||||
|
||||
require (
|
||||
|
@ -87,13 +90,11 @@ require (
|
|||
go.uber.org/zap v1.23.0 // indirect
|
||||
golang.org/x/crypto v0.0.0-20221010152910-d6f0a8c073c2 // indirect
|
||||
golang.org/x/net v0.2.0 // indirect
|
||||
golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f // indirect
|
||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect
|
||||
golang.org/x/sys v0.2.0 // indirect
|
||||
golang.org/x/text v0.4.0 // indirect
|
||||
golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 // indirect
|
||||
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987 // indirect
|
||||
google.golang.org/grpc v1.50.0 // indirect
|
||||
google.golang.org/protobuf v1.28.1 // indirect
|
||||
gopkg.in/square/go-jose.v2 v2.6.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
)
|
||||
|
|
16
go.sum
16
go.sum
|
@ -32,6 +32,8 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX
|
|||
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
|
||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||
github.com/BurntSushi/toml v1.0.0 h1:dtDWrepsVPfW9H/4y7dDgFc2MBUSeJhlaDtK13CxFlU=
|
||||
github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
|
||||
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||
|
@ -247,6 +249,8 @@ github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6f
|
|||
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
|
||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||
github.com/nicksnyder/go-i18n/v2 v2.2.1 h1:aOzRCdwsJuoExfZhoiXHy4bjruwCMdt5otbYojM/PaA=
|
||||
github.com/nicksnyder/go-i18n/v2 v2.2.1/go.mod h1:fF2++lPHlo+/kPaj3nB0uxtPwzlPm+BlgwGX7MkeGj0=
|
||||
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
|
||||
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
|
||||
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
|
||||
|
@ -379,6 +383,7 @@ github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
|
|||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
go.mongodb.org/mongo-driver v1.11.0 h1:FZKhBSTydeuffHj9CBjXlR8vQLee1cQyTWYPA6/tqiE=
|
||||
go.mongodb.org/mongo-driver v1.11.0/go.mod h1:s7p5vEtfbeR1gYi6pnj3c3/urpbLv2T5Sfd6Rp2HBB8=
|
||||
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
|
||||
|
@ -402,6 +407,7 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U
|
|||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
|
@ -437,6 +443,7 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB
|
|||
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
|
@ -470,6 +477,7 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R
|
|||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.0.0-20201201195509-5d6afe98e0b7/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
|
||||
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
|
@ -478,6 +486,7 @@ golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su
|
|||
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/net v0.0.0-20220531201128-c960675eff93/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||
golang.org/x/net v0.0.0-20221002022538-bcab6841153b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
|
||||
golang.org/x/net v0.0.0-20221004154528-8021a29435af/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
|
||||
golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU=
|
||||
|
@ -500,8 +509,8 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ
|
|||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f h1:Ax0t5p6N38Ga0dThY21weqDEyz2oklo4IvDkpigvkD8=
|
||||
golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw=
|
||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
|
@ -553,6 +562,7 @@ golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220608164250-635b8c9b7f68/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A=
|
||||
|
@ -615,6 +625,7 @@ golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc
|
|||
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
||||
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
||||
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
|
@ -717,6 +728,7 @@ gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|||
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"github.com/nicksnyder/go-i18n/v2/i18n"
|
||||
"golang.org/x/text/language"
|
||||
yaml "gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
func initLocaleBundle() *i18n.Bundle {
|
||||
bundle := i18n.NewBundle(language.English)
|
||||
bundle.RegisterUnmarshalFunc("yaml", yaml.Unmarshal)
|
||||
bundle.LoadMessageFile("locales/active.ja.yaml")
|
||||
bundle.LoadMessageFile("locales/active.fr.yaml")
|
||||
|
||||
return bundle
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
Advertise: '@{{.Host}} is now hosting Audon!'
|
|
@ -0,0 +1,3 @@
|
|||
Advertise:
|
||||
hash: sha1-bac4955e5b2655d6226dfb6e190f591f0e9f64cf
|
||||
other: '@{{.Host}} est maintenant l'hôte d'Audon !'
|
|
@ -0,0 +1,3 @@
|
|||
Advertise:
|
||||
hash: sha1-bac4955e5b2655d6226dfb6e190f591f0e9f64cf
|
||||
other: "@{{.Host}} が Audon をホスト中!"
|
43
room.go
43
room.go
|
@ -4,13 +4,17 @@ import (
|
|||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/jaevor/go-nanoid"
|
||||
"github.com/labstack/echo/v4"
|
||||
"github.com/livekit/protocol/auth"
|
||||
"github.com/livekit/protocol/livekit"
|
||||
mastodon "github.com/mattn/go-mastodon"
|
||||
"github.com/nicksnyder/go-i18n/v2/i18n"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
)
|
||||
|
@ -338,6 +342,45 @@ func joinRoomHandler(c echo.Context) (err error) {
|
|||
c.Logger().Error(err)
|
||||
return echo.NewHTTPError(http.StatusConflict)
|
||||
}
|
||||
|
||||
if mainConfig.Bot.Enable && room.Advertise != "" {
|
||||
botClient := mastodon.NewClient(&mastodon.Config{
|
||||
Server: mainConfig.Bot.Server.String(),
|
||||
ClientID: mainConfig.Bot.ClientID,
|
||||
ClientSecret: mainConfig.Bot.ClientSecret,
|
||||
AccessToken: mainConfig.Bot.AccessToken,
|
||||
})
|
||||
botClient.UserAgent = USER_AGENT
|
||||
|
||||
localizer := i18n.NewLocalizer(localeBundle, room.Advertise)
|
||||
header := localizer.MustLocalize(&i18n.LocalizeConfig{
|
||||
DefaultMessage: &i18n.Message{
|
||||
ID: "Advertise",
|
||||
Other: "@{{.Host}} is now hosting Audon!",
|
||||
},
|
||||
TemplateData: map[string]string{
|
||||
"Host": room.Host.Webfinger,
|
||||
},
|
||||
})
|
||||
|
||||
messages := []string{
|
||||
header,
|
||||
fmt.Sprintf("🎙 %s\n🔗 https://%s/r/%s", room.Title, mainConfig.LocalDomain, room.RoomID),
|
||||
}
|
||||
if room.Description != "" {
|
||||
messages = append(messages, room.Description)
|
||||
}
|
||||
messages = append(messages, "#Audon")
|
||||
message := strings.Join(messages, "\n\n")
|
||||
|
||||
if _, err := botClient.PostStatus(c.Request().Context(), &mastodon.Toot{
|
||||
Status: message,
|
||||
Language: room.Advertise,
|
||||
Visibility: "public",
|
||||
}); err != nil {
|
||||
c.Logger().Error(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return c.JSON(http.StatusOK, resp)
|
||||
|
|
|
@ -43,6 +43,7 @@ type (
|
|||
ScheduledAt time.Time `bson:"scheduled_at" json:"scheduled_at"`
|
||||
EndedAt time.Time `bson:"ended_at" json:"ended_at"`
|
||||
CreatedAt time.Time `bson:"created_at" json:"created_at"`
|
||||
Advertise string `bson:"advertise" json:"advertise"`
|
||||
}
|
||||
|
||||
TokenResponse struct {
|
||||
|
|
|
@ -22,6 +22,7 @@ import (
|
|||
"github.com/labstack/echo/v4"
|
||||
lksdk "github.com/livekit/server-sdk-go"
|
||||
"github.com/mattn/go-mastodon"
|
||||
"github.com/nicksnyder/go-i18n/v2/i18n"
|
||||
"github.com/rbcervilla/redisstore/v9"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
|
@ -50,6 +51,7 @@ var (
|
|||
mainValidator = validator.New()
|
||||
mainConfig *AppConfig
|
||||
lkRoomServiceClient *lksdk.RoomServiceClient
|
||||
localeBundle *i18n.Bundle
|
||||
)
|
||||
|
||||
func init() {
|
||||
|
@ -69,6 +71,9 @@ func main() {
|
|||
log.Fatalf("Failed loading config values: %s\n", err.Error())
|
||||
}
|
||||
|
||||
// Load locales
|
||||
localeBundle = initLocaleBundle()
|
||||
|
||||
// Setup Livekit RoomService Client
|
||||
lkURL := &url.URL{
|
||||
Scheme: "https",
|
||||
|
|
Ładowanie…
Reference in New Issue