mirror of
https://github.com/idanoo/autobrr
synced 2025-07-22 16:29:12 +00:00
feat(irc): support optional SASL and NickServ auth (#511)
* feat(irc): support SASL and NickServ auth * feat(irc): add missing fields * feat(irc): support SASL and NickServ auth * feat(irc): add missing fields * feat(irc): add validation * feat(indexers): unify and set required values * feat(irc): add postgres migrations * feat(irc): use nick as handlerkey * feat(irc): use account for nickserv * fix(irc): pg db migration
This commit is contained in:
parent
4ef0408f33
commit
4bf023d030
65 changed files with 1404 additions and 631 deletions
|
@ -26,7 +26,7 @@ func NewIrcRepo(log logger.Logger, db *DB) domain.IrcRepo {
|
|||
|
||||
func (r *IrcRepo) GetNetworkByID(ctx context.Context, id int64) (*domain.IrcNetwork, error) {
|
||||
queryBuilder := r.db.squirrel.
|
||||
Select("id", "enabled", "name", "server", "port", "tls", "pass", "invite_command", "nickserv_account", "nickserv_password").
|
||||
Select("id", "enabled", "name", "server", "port", "tls", "pass", "nick", "auth_mechanism", "auth_account", "auth_password", "invite_command").
|
||||
From("irc_network").
|
||||
Where("id = ?", id)
|
||||
|
||||
|
@ -38,20 +38,21 @@ func (r *IrcRepo) GetNetworkByID(ctx context.Context, id int64) (*domain.IrcNetw
|
|||
|
||||
var n domain.IrcNetwork
|
||||
|
||||
var pass, inviteCmd sql.NullString
|
||||
var nsAccount, nsPassword sql.NullString
|
||||
var pass, nick, inviteCmd sql.NullString
|
||||
var account, password sql.NullString
|
||||
var tls sql.NullBool
|
||||
|
||||
row := r.db.handler.QueryRowContext(ctx, query, args...)
|
||||
if err := row.Scan(&n.ID, &n.Enabled, &n.Name, &n.Server, &n.Port, &tls, &pass, &inviteCmd, &nsAccount, &nsPassword); err != nil {
|
||||
if err := row.Scan(&n.ID, &n.Enabled, &n.Name, &n.Server, &n.Port, &tls, &pass, &nick, &n.Auth.Mechanism, &account, &password, &inviteCmd); err != nil {
|
||||
return nil, errors.Wrap(err, "error scanning row")
|
||||
}
|
||||
|
||||
n.TLS = tls.Bool
|
||||
n.Pass = pass.String
|
||||
n.Nick = nick.String
|
||||
n.InviteCommand = inviteCmd.String
|
||||
n.NickServ.Account = nsAccount.String
|
||||
n.NickServ.Password = nsPassword.String
|
||||
n.Auth.Account = account.String
|
||||
n.Auth.Password = password.String
|
||||
|
||||
return &n, nil
|
||||
}
|
||||
|
@ -103,7 +104,7 @@ func (r *IrcRepo) DeleteNetwork(ctx context.Context, id int64) error {
|
|||
|
||||
func (r *IrcRepo) FindActiveNetworks(ctx context.Context) ([]domain.IrcNetwork, error) {
|
||||
queryBuilder := r.db.squirrel.
|
||||
Select("id", "enabled", "name", "server", "port", "tls", "pass", "invite_command", "nickserv_account", "nickserv_password").
|
||||
Select("id", "enabled", "name", "server", "port", "tls", "pass", "nick", "auth_mechanism", "auth_account", "auth_password", "invite_command").
|
||||
From("irc_network").
|
||||
Where("enabled = ?", true)
|
||||
|
||||
|
@ -123,20 +124,21 @@ func (r *IrcRepo) FindActiveNetworks(ctx context.Context) ([]domain.IrcNetwork,
|
|||
for rows.Next() {
|
||||
var net domain.IrcNetwork
|
||||
|
||||
var pass, inviteCmd sql.NullString
|
||||
var nsAccount, nsPassword sql.NullString
|
||||
var pass, nick, inviteCmd sql.NullString
|
||||
var account, password sql.NullString
|
||||
var tls sql.NullBool
|
||||
|
||||
if err := rows.Scan(&net.ID, &net.Enabled, &net.Name, &net.Server, &net.Port, &tls, &pass, &inviteCmd, &nsAccount, &nsPassword); err != nil {
|
||||
if err := rows.Scan(&net.ID, &net.Enabled, &net.Name, &net.Server, &net.Port, &tls, &pass, &nick, &net.Auth.Mechanism, &account, &password, &inviteCmd); err != nil {
|
||||
return nil, errors.Wrap(err, "error scanning row")
|
||||
}
|
||||
|
||||
net.TLS = tls.Bool
|
||||
net.Pass = pass.String
|
||||
net.Nick = nick.String
|
||||
net.InviteCommand = inviteCmd.String
|
||||
|
||||
net.NickServ.Account = nsAccount.String
|
||||
net.NickServ.Password = nsPassword.String
|
||||
net.Auth.Account = account.String
|
||||
net.Auth.Password = password.String
|
||||
|
||||
networks = append(networks, net)
|
||||
}
|
||||
|
@ -149,7 +151,7 @@ func (r *IrcRepo) FindActiveNetworks(ctx context.Context) ([]domain.IrcNetwork,
|
|||
|
||||
func (r *IrcRepo) ListNetworks(ctx context.Context) ([]domain.IrcNetwork, error) {
|
||||
queryBuilder := r.db.squirrel.
|
||||
Select("id", "enabled", "name", "server", "port", "tls", "pass", "invite_command", "nickserv_account", "nickserv_password").
|
||||
Select("id", "enabled", "name", "server", "port", "tls", "pass", "nick", "auth_mechanism", "auth_account", "auth_password", "invite_command").
|
||||
From("irc_network").
|
||||
OrderBy("name ASC")
|
||||
|
||||
|
@ -169,20 +171,21 @@ func (r *IrcRepo) ListNetworks(ctx context.Context) ([]domain.IrcNetwork, error)
|
|||
for rows.Next() {
|
||||
var net domain.IrcNetwork
|
||||
|
||||
var pass, inviteCmd sql.NullString
|
||||
var nsAccount, nsPassword sql.NullString
|
||||
var pass, nick, inviteCmd sql.NullString
|
||||
var account, password sql.NullString
|
||||
var tls sql.NullBool
|
||||
|
||||
if err := rows.Scan(&net.ID, &net.Enabled, &net.Name, &net.Server, &net.Port, &tls, &pass, &inviteCmd, &nsAccount, &nsPassword); err != nil {
|
||||
if err := rows.Scan(&net.ID, &net.Enabled, &net.Name, &net.Server, &net.Port, &tls, &pass, &nick, &net.Auth.Mechanism, &account, &password, &inviteCmd); err != nil {
|
||||
return nil, errors.Wrap(err, "error scanning row")
|
||||
}
|
||||
|
||||
net.TLS = tls.Bool
|
||||
net.Pass = pass.String
|
||||
net.Nick = nick.String
|
||||
net.InviteCommand = inviteCmd.String
|
||||
|
||||
net.NickServ.Account = nsAccount.String
|
||||
net.NickServ.Password = nsPassword.String
|
||||
net.Auth.Account = account.String
|
||||
net.Auth.Password = password.String
|
||||
|
||||
networks = append(networks, net)
|
||||
}
|
||||
|
@ -232,10 +235,10 @@ func (r *IrcRepo) ListChannels(networkID int64) ([]domain.IrcChannel, error) {
|
|||
|
||||
func (r *IrcRepo) CheckExistingNetwork(ctx context.Context, network *domain.IrcNetwork) (*domain.IrcNetwork, error) {
|
||||
queryBuilder := r.db.squirrel.
|
||||
Select("id", "enabled", "name", "server", "port", "tls", "pass", "invite_command", "nickserv_account", "nickserv_password").
|
||||
Select("id", "enabled", "name", "server", "port", "tls", "pass", "nick", "auth_mechanism", "auth_account", "auth_password", "invite_command").
|
||||
From("irc_network").
|
||||
Where("server = ?", network.Server).
|
||||
Where("nickserv_account = ?", network.NickServ.Account)
|
||||
Where("auth_account = ?", network.Auth.Account)
|
||||
|
||||
query, args, err := queryBuilder.ToSql()
|
||||
if err != nil {
|
||||
|
@ -247,10 +250,11 @@ func (r *IrcRepo) CheckExistingNetwork(ctx context.Context, network *domain.IrcN
|
|||
|
||||
var net domain.IrcNetwork
|
||||
|
||||
var pass, inviteCmd, nickPass sql.NullString
|
||||
var pass, nick, inviteCmd sql.NullString
|
||||
var account, password sql.NullString
|
||||
var tls sql.NullBool
|
||||
|
||||
err = row.Scan(&net.ID, &net.Enabled, &net.Name, &net.Server, &net.Port, &tls, &pass, &inviteCmd, &net.NickServ.Account, &nickPass)
|
||||
err = row.Scan(&net.ID, &net.Enabled, &net.Name, &net.Server, &net.Port, &tls, &pass, &nick, &net.Auth.Mechanism, &account, &password, &inviteCmd)
|
||||
if err == sql.ErrNoRows {
|
||||
// no result is not an error in our case
|
||||
return nil, nil
|
||||
|
@ -260,8 +264,10 @@ func (r *IrcRepo) CheckExistingNetwork(ctx context.Context, network *domain.IrcN
|
|||
|
||||
net.TLS = tls.Bool
|
||||
net.Pass = pass.String
|
||||
net.Nick = nick.String
|
||||
net.InviteCommand = inviteCmd.String
|
||||
net.NickServ.Password = nickPass.String
|
||||
net.Auth.Account = account.String
|
||||
net.Auth.Password = password.String
|
||||
|
||||
return &net, nil
|
||||
}
|
||||
|
@ -269,10 +275,11 @@ func (r *IrcRepo) CheckExistingNetwork(ctx context.Context, network *domain.IrcN
|
|||
func (r *IrcRepo) StoreNetwork(network *domain.IrcNetwork) error {
|
||||
netName := toNullString(network.Name)
|
||||
pass := toNullString(network.Pass)
|
||||
nick := toNullString(network.Nick)
|
||||
inviteCmd := toNullString(network.InviteCommand)
|
||||
|
||||
nsAccount := toNullString(network.NickServ.Account)
|
||||
nsPassword := toNullString(network.NickServ.Password)
|
||||
account := toNullString(network.Auth.Account)
|
||||
password := toNullString(network.Auth.Password)
|
||||
|
||||
var err error
|
||||
var retID int64
|
||||
|
@ -286,9 +293,11 @@ func (r *IrcRepo) StoreNetwork(network *domain.IrcNetwork) error {
|
|||
"port",
|
||||
"tls",
|
||||
"pass",
|
||||
"nick",
|
||||
"auth_mechanism",
|
||||
"auth_account",
|
||||
"auth_password",
|
||||
"invite_command",
|
||||
"nickserv_account",
|
||||
"nickserv_password",
|
||||
).
|
||||
Values(
|
||||
network.Enabled,
|
||||
|
@ -297,9 +306,11 @@ func (r *IrcRepo) StoreNetwork(network *domain.IrcNetwork) error {
|
|||
network.Port,
|
||||
network.TLS,
|
||||
pass,
|
||||
nick,
|
||||
network.Auth.Mechanism,
|
||||
account,
|
||||
password,
|
||||
inviteCmd,
|
||||
nsAccount,
|
||||
nsPassword,
|
||||
).
|
||||
Suffix("RETURNING id").
|
||||
RunWith(r.db.handler)
|
||||
|
@ -317,10 +328,11 @@ func (r *IrcRepo) StoreNetwork(network *domain.IrcNetwork) error {
|
|||
func (r *IrcRepo) UpdateNetwork(ctx context.Context, network *domain.IrcNetwork) error {
|
||||
netName := toNullString(network.Name)
|
||||
pass := toNullString(network.Pass)
|
||||
nick := toNullString(network.Nick)
|
||||
inviteCmd := toNullString(network.InviteCommand)
|
||||
|
||||
nsAccount := toNullString(network.NickServ.Account)
|
||||
nsPassword := toNullString(network.NickServ.Password)
|
||||
account := toNullString(network.Auth.Account)
|
||||
password := toNullString(network.Auth.Password)
|
||||
|
||||
var err error
|
||||
|
||||
|
@ -332,9 +344,11 @@ func (r *IrcRepo) UpdateNetwork(ctx context.Context, network *domain.IrcNetwork)
|
|||
Set("port", network.Port).
|
||||
Set("tls", network.TLS).
|
||||
Set("pass", pass).
|
||||
Set("nick", nick).
|
||||
Set("auth_mechanism", network.Auth.Mechanism).
|
||||
Set("auth_account", account).
|
||||
Set("auth_password", password).
|
||||
Set("invite_command", inviteCmd).
|
||||
Set("nickserv_account", nsAccount).
|
||||
Set("nickserv_password", nsPassword).
|
||||
Set("updated_at", time.Now().Format(time.RFC3339)).
|
||||
Where("id = ?", network.ID)
|
||||
|
||||
|
|
|
@ -36,14 +36,16 @@ CREATE TABLE irc_network
|
|||
port INTEGER NOT NULL,
|
||||
tls BOOLEAN,
|
||||
pass TEXT,
|
||||
nick TEXT,
|
||||
auth_mechanism TEXT,
|
||||
auth_account TEXT,
|
||||
auth_password TEXT,
|
||||
invite_command TEXT,
|
||||
nickserv_account TEXT,
|
||||
nickserv_password TEXT,
|
||||
connected BOOLEAN,
|
||||
connected_since TIMESTAMP,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE (server, port, nickserv_account)
|
||||
UNIQUE (server, port, nick)
|
||||
);
|
||||
|
||||
CREATE TABLE irc_channel
|
||||
|
@ -589,4 +591,28 @@ CREATE INDEX indexer_identifier_index
|
|||
ALTER TABLE filter
|
||||
ADD COLUMN use_regex_release_tags BOOLEAN DEFAULT FALSE;
|
||||
`,
|
||||
`ALTER TABLE irc_network
|
||||
RENAME COLUMN nickserv_account TO auth_account;
|
||||
|
||||
ALTER TABLE irc_network
|
||||
RENAME COLUMN nickserv_password TO auth_password;
|
||||
|
||||
ALTER TABLE irc_network
|
||||
ADD nick TEXT;
|
||||
|
||||
ALTER TABLE irc_network
|
||||
ADD auth_mechanism TEXT DEFAULT 'SASL_PLAIN';
|
||||
|
||||
ALTER TABLE irc_network
|
||||
DROP CONSTRAINT irc_network_server_port_nickserv_account_key;
|
||||
|
||||
ALTER TABLE irc_network
|
||||
ADD CONSTRAINT irc_network_server_port_nick_key
|
||||
UNIQUE (server, port, nick);
|
||||
|
||||
UPDATE irc_network
|
||||
SET nick = irc_network.auth_account;
|
||||
|
||||
UPDATE irc_network
|
||||
SET auth_mechanism = 'SASL_PLAIN';`,
|
||||
}
|
||||
|
|
|
@ -36,14 +36,16 @@ CREATE TABLE irc_network
|
|||
port INTEGER NOT NULL,
|
||||
tls BOOLEAN,
|
||||
pass TEXT,
|
||||
nick TEXT,
|
||||
auth_mechanism TEXT,
|
||||
auth_account TEXT,
|
||||
auth_password TEXT,
|
||||
invite_command TEXT,
|
||||
nickserv_account TEXT,
|
||||
nickserv_password TEXT,
|
||||
connected BOOLEAN,
|
||||
connected_since TIMESTAMP,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE (server, port, nickserv_account)
|
||||
UNIQUE (server, port, nick)
|
||||
);
|
||||
|
||||
CREATE TABLE irc_channel
|
||||
|
@ -909,4 +911,52 @@ CREATE INDEX indexer_identifier_index
|
|||
ALTER TABLE filter
|
||||
ADD COLUMN use_regex_release_tags BOOLEAN DEFAULT FALSE;
|
||||
`,
|
||||
`
|
||||
CREATE TABLE irc_network_dg_tmp
|
||||
(
|
||||
id INTEGER
|
||||
primary key,
|
||||
enabled BOOLEAN,
|
||||
name TEXT not null,
|
||||
server TEXT not null,
|
||||
port INTEGER not null,
|
||||
tls BOOLEAN,
|
||||
pass TEXT,
|
||||
nick TEXT,
|
||||
auth_mechanism TEXT,
|
||||
auth_account TEXT,
|
||||
auth_password TEXT,
|
||||
invite_command TEXT,
|
||||
connected BOOLEAN,
|
||||
connected_since TIMESTAMP,
|
||||
created_at TIMESTAMP default CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP default CURRENT_TIMESTAMP,
|
||||
unique (server, port, nick)
|
||||
);
|
||||
|
||||
INSERT INTO irc_network_dg_tmp(id, enabled, name, server, port, tls, pass, nick, auth_mechanism, auth_account, auth_password, invite_command,
|
||||
connected, connected_since, created_at, updated_at)
|
||||
SELECT id,
|
||||
enabled,
|
||||
name,
|
||||
server,
|
||||
port,
|
||||
tls,
|
||||
pass,
|
||||
nickserv_account,
|
||||
'SASL_PLAIN',
|
||||
nickserv_account,
|
||||
nickserv_password,
|
||||
invite_command,
|
||||
connected,
|
||||
connected_since,
|
||||
created_at,
|
||||
updated_at
|
||||
FROM irc_network;
|
||||
|
||||
DROP TABLE irc_network;
|
||||
|
||||
ALTER TABLE irc_network_dg_tmp
|
||||
RENAME TO irc_network;
|
||||
`,
|
||||
}
|
||||
|
|
|
@ -14,9 +14,18 @@ type IrcChannel struct {
|
|||
Monitoring bool `json:"monitoring"`
|
||||
}
|
||||
|
||||
type NickServ struct {
|
||||
Account string `json:"account,omitempty"`
|
||||
Password string `json:"password,omitempty"`
|
||||
type IRCAuthMechanism string
|
||||
|
||||
const (
|
||||
IRCAuthMechanismNone IRCAuthMechanism = "NONE"
|
||||
IRCAuthMechanismSASLPlain IRCAuthMechanism = "SASL_PLAIN"
|
||||
IRCAuthMechanismNickServ IRCAuthMechanism = "NICKSERV"
|
||||
)
|
||||
|
||||
type IRCAuth struct {
|
||||
Mechanism IRCAuthMechanism `json:"mechanism,omitempty"`
|
||||
Account string `json:"account,omitempty"`
|
||||
Password string `json:"password,omitempty"`
|
||||
}
|
||||
|
||||
type IrcNetwork struct {
|
||||
|
@ -27,8 +36,9 @@ type IrcNetwork struct {
|
|||
Port int `json:"port"`
|
||||
TLS bool `json:"tls"`
|
||||
Pass string `json:"pass"`
|
||||
Nick string `json:"nick"`
|
||||
Auth IRCAuth `json:"auth,omitempty"`
|
||||
InviteCommand string `json:"invite_command"`
|
||||
NickServ NickServ `json:"nickserv,omitempty"`
|
||||
Channels []IrcChannel `json:"channels"`
|
||||
Connected bool `json:"connected"`
|
||||
ConnectedSince *time.Time `json:"connected_since"`
|
||||
|
@ -42,8 +52,9 @@ type IrcNetworkWithHealth struct {
|
|||
Port int `json:"port"`
|
||||
TLS bool `json:"tls"`
|
||||
Pass string `json:"pass"`
|
||||
Nick string `json:"nick"`
|
||||
Auth IRCAuth `json:"auth,omitempty"`
|
||||
InviteCommand string `json:"invite_command"`
|
||||
NickServ NickServ `json:"nickserv,omitempty"`
|
||||
CurrentNick string `json:"current_nick"`
|
||||
PreferredNick string `json:"preferred_nick"`
|
||||
Channels []ChannelWithHealth `json:"channels"`
|
||||
|
|
|
@ -15,11 +15,14 @@ source: custom
|
|||
settings:
|
||||
- name: passkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Pass key
|
||||
help: "Your passkey"
|
||||
regex: /([\da-z]{32})
|
||||
|
||||
- name: uid
|
||||
type: secret
|
||||
required: true
|
||||
label: User ID
|
||||
help: "Your User ID"
|
||||
regex: /(\d+)
|
||||
|
@ -34,12 +37,19 @@ irc:
|
|||
announcers:
|
||||
- ACiD-BaBy
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user_bot
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
|
|
|
@ -15,10 +15,13 @@ source: gazelle
|
|||
settings:
|
||||
- name: authkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Auth key
|
||||
help: Right click DL on a torrent and get the authkey.
|
||||
|
||||
- name: torrent_pass
|
||||
type: secret
|
||||
required: true
|
||||
label: Torrent pass
|
||||
help: Right click DL on a torrent and get the torrent_pass.
|
||||
|
||||
|
@ -32,22 +35,30 @@ irc:
|
|||
announcers:
|
||||
- Voyager
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user-bot
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your main user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
help: NickServ password
|
||||
|
||||
- name: invite_command
|
||||
type: secret
|
||||
default: "Voyager autobot USERNAME IRCKey"
|
||||
required: false
|
||||
default: "Voyager autobot USERNAME IRCKEY"
|
||||
required: true
|
||||
label: Invite command
|
||||
help: Invite auth with Voyager.
|
||||
help: Invite auth with Voyager. Replace USERNAME with site nick and set IRCKEY.
|
||||
|
||||
parse:
|
||||
type: multi
|
||||
|
|
|
@ -15,6 +15,7 @@ source: gazelle
|
|||
settings:
|
||||
- name: passkey
|
||||
type: secret
|
||||
required: true
|
||||
label: PassKey
|
||||
help: Settings -> Account -> Passkey.
|
||||
|
||||
|
@ -28,22 +29,30 @@ irc:
|
|||
announcers:
|
||||
- Satsuki
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user|autodl
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: false
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user|autodl
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: false
|
||||
label: NickServ Password
|
||||
help: NickServ password
|
||||
|
||||
- name: invite_command
|
||||
type: secret
|
||||
default: "/msg Satsuki enter #announce {AB username} ircKey"
|
||||
default: "Satsuki enter #announce USERNAME IRCKEY"
|
||||
required: true
|
||||
label: Invite command
|
||||
help: Invite auth with Satsuki, animebytes.tv/irc
|
||||
help: Invite auth with Satsuki, animebytes.tv/irc. Replace USERNAME and IRCKEY.
|
||||
|
||||
parse:
|
||||
type: single
|
||||
|
|
|
@ -15,6 +15,7 @@ source: UNIT3D (F3NIX)
|
|||
settings:
|
||||
- name: rsskey
|
||||
type: secret
|
||||
required: true
|
||||
label: RSS key
|
||||
help: "Go to your profile, My Security, RSS Key and copy RSS key."
|
||||
|
||||
|
@ -29,22 +30,30 @@ irc:
|
|||
- Willie
|
||||
- Millie
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. MUST follow format user|autodl
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user|autodl
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
help: NickServ password
|
||||
|
||||
- name: invite_command
|
||||
type: secret
|
||||
default: "Millie announce ircKey"
|
||||
default: "Millie announce IRCKEY"
|
||||
required: true
|
||||
label: Invite command
|
||||
help: Invite auth with Millie.
|
||||
help: Invite auth with Millie. Replace IRCKEY.
|
||||
|
||||
parse:
|
||||
type: single
|
||||
|
|
|
@ -15,6 +15,7 @@ source: custom
|
|||
settings:
|
||||
- name: passkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Pass key
|
||||
help: "Your passkey"
|
||||
regex: /([\da-z]{32})
|
||||
|
@ -29,12 +30,19 @@ irc:
|
|||
announcers:
|
||||
- BHD-bot
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user_bot
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
|
|
|
@ -15,6 +15,7 @@ source: custom
|
|||
settings:
|
||||
- name: rsskey
|
||||
type: secret
|
||||
required: true
|
||||
label: RSS key
|
||||
help: "The rsskey in your RSS feed link"
|
||||
|
||||
|
@ -28,12 +29,19 @@ irc:
|
|||
announcers:
|
||||
- Tracer
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Ask staff to unlock it!
|
||||
- name: nickserv.password
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
|
|
|
@ -16,14 +16,19 @@ source: gazelle
|
|||
settings:
|
||||
- name: authkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Auth key
|
||||
help: Right click DL on a torrent and get the authkey.
|
||||
|
||||
- name: torrent_pass
|
||||
type: secret
|
||||
required: true
|
||||
label: Torrent pass
|
||||
help: Right click DL on a torrent and get the torrent_pass.
|
||||
|
||||
- name: api_key
|
||||
type: secret
|
||||
required: true
|
||||
label: API Key
|
||||
help: Username -> Edit Profile -> API
|
||||
|
||||
|
@ -49,12 +54,19 @@ irc:
|
|||
announcers:
|
||||
- Barney
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user|autodl
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user|autodl
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
|
|
|
@ -15,7 +15,8 @@ source: UNIT3D
|
|||
settings:
|
||||
- name: passkey
|
||||
type: secret
|
||||
label: Passkey
|
||||
required: true
|
||||
label: RSS key
|
||||
help: "Go to your profile tab under safety, copy RSS Key (RID)"
|
||||
|
||||
irc:
|
||||
|
@ -28,22 +29,30 @@ irc:
|
|||
announcers:
|
||||
- DBBot
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: false
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user|autodl
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: false
|
||||
label: NickServ Password
|
||||
help: NickServ password
|
||||
|
||||
- name: invite_command
|
||||
type: secret
|
||||
default: "DBBot announce ircKey"
|
||||
default: "DBBot announce IRCKEY"
|
||||
required: true
|
||||
label: Invite command
|
||||
help: Invite auth with DBBot.
|
||||
help: Invite auth with DBBot. Replace IRCKEY with your key.
|
||||
|
||||
parse:
|
||||
type: single
|
||||
|
|
|
@ -15,6 +15,7 @@ source: gazelle
|
|||
settings:
|
||||
- name: passkey
|
||||
type: secret
|
||||
required: true
|
||||
label: PassKey
|
||||
help: Settings -> Security -> Passkey.
|
||||
|
||||
|
@ -28,16 +29,24 @@ irc:
|
|||
announcers:
|
||||
- ENDOR
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user|autodl
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: false
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user|autodl
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: false
|
||||
label: NickServ Password
|
||||
help: NickServ password
|
||||
|
||||
- name: invite_command
|
||||
type: secret
|
||||
default: "ENDOR !invite USERNAME IRCKEY"
|
||||
|
|
|
@ -15,10 +15,13 @@ source: gazelle
|
|||
settings:
|
||||
- name: authkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Auth key
|
||||
help: Right click DL on a torrent and get the authkey.
|
||||
|
||||
- name: torrent_pass
|
||||
type: secret
|
||||
required: true
|
||||
label: Torrent pass
|
||||
help: Right click DL on a torrent and get the torrent_pass.
|
||||
|
||||
|
@ -32,12 +35,19 @@ irc:
|
|||
announcers:
|
||||
- "^Wizard^"
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot. Must have staff permission first.
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user_bot. Must have staff permission first.
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
|
|
|
@ -15,10 +15,13 @@ source: gazelle
|
|||
settings:
|
||||
- name: authkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Auth key
|
||||
help: Right click DL on a torrent and get the authkey.
|
||||
|
||||
- name: torrent_pass
|
||||
type: secret
|
||||
required: true
|
||||
label: Torrent pass
|
||||
help: Right click DL on a torrent and get the torrent_pass.
|
||||
|
||||
|
@ -32,12 +35,19 @@ irc:
|
|||
announcers:
|
||||
- TheGimp
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user|bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user|bot
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
|
|
|
@ -15,6 +15,7 @@ source: custom
|
|||
settings:
|
||||
- name: passkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Passkey
|
||||
help: "The passkey in your profile."
|
||||
|
||||
|
@ -28,12 +29,19 @@ irc:
|
|||
announcers:
|
||||
- Announce
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_dl
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: false
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user_dl
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: false
|
||||
label: NickServ Password
|
||||
|
|
|
@ -13,10 +13,13 @@ source: gazelle
|
|||
settings:
|
||||
- name: uid
|
||||
type: text
|
||||
required: true
|
||||
label: User ID
|
||||
help: Create rss link at https://www.fuzer.me/getrss.php and find at &u=11111
|
||||
|
||||
- name: passkey
|
||||
type: secret
|
||||
required: true
|
||||
label: PassKey
|
||||
help: Create rss link at https://www.fuzer.me/getrss.php and find at &torrent_pass=...
|
||||
|
||||
|
@ -30,15 +33,22 @@ irc:
|
|||
announcers:
|
||||
- Fuzer
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: false
|
||||
label: NickServ Account
|
||||
- name: nickserv.password
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: false
|
||||
label: NickServ Password
|
||||
help: A password of your choice to be used for the bot identification. Save it!
|
||||
help: NickServ password
|
||||
|
||||
parse:
|
||||
type: single
|
||||
|
|
|
@ -16,14 +16,19 @@ source: gazelle
|
|||
settings:
|
||||
- name: authkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Auth key
|
||||
help: Right click DL on a torrent and get the authkey.
|
||||
|
||||
- name: torrent_pass
|
||||
type: secret
|
||||
required: true
|
||||
label: Torrent pass
|
||||
help: Right click DL on a torrent and get the torrent_pass.
|
||||
|
||||
- name: api_key
|
||||
type: secret
|
||||
required: true
|
||||
label: API Key
|
||||
help: Username -> Edit / Settings -> API Keys
|
||||
|
||||
|
@ -49,22 +54,30 @@ irc:
|
|||
announcers:
|
||||
- Vertigo
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user|bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user|bot
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
help: NickServ password
|
||||
|
||||
- name: invite_command
|
||||
type: secret
|
||||
default: "Vertigo ENTER #GGn-Announce USERNAME IRCKey"
|
||||
default: "Vertigo ENTER #GGn-Announce USERNAME IRCKEY"
|
||||
required: true
|
||||
label: Invite command
|
||||
help: Invite auth with Vertigo.
|
||||
help: Invite auth with Vertigo. Replace USERNAME and IRCKEY.
|
||||
|
||||
parse:
|
||||
type: single
|
||||
|
|
|
@ -15,6 +15,7 @@ source: custom
|
|||
settings:
|
||||
- name: rsskey
|
||||
type: secret
|
||||
required: true
|
||||
label: RSS key
|
||||
help: "Go to My Panel and then Change PID. It will show the PID, but don't click it!"
|
||||
|
||||
|
@ -28,12 +29,19 @@ irc:
|
|||
announcers:
|
||||
- hdspace
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: false
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user_bot
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: false
|
||||
label: NickServ Password
|
||||
|
|
|
@ -16,10 +16,12 @@ source: xbtit
|
|||
settings:
|
||||
- name: key
|
||||
type: secret
|
||||
required: true
|
||||
label: RSS key
|
||||
help: "Generate a RSS feed and copy key from URL"
|
||||
- name: token
|
||||
type: secret
|
||||
required: true
|
||||
label: RSS Token
|
||||
help: "Generate a RSS feed and copy token from URL"
|
||||
|
||||
|
@ -33,12 +35,19 @@ irc:
|
|||
announcers:
|
||||
- HoboLarry
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user-bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user-bot
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
|
|
|
@ -15,6 +15,7 @@ source: custom
|
|||
settings:
|
||||
- name: passkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Passkey
|
||||
help: Copy the passkey from your profile page
|
||||
|
||||
|
@ -28,22 +29,30 @@ irc:
|
|||
announcers:
|
||||
- midgards
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user|autodl
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: false
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user|autodl
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: false
|
||||
label: NickServ Password
|
||||
help: NickServ password
|
||||
|
||||
- name: invite_command
|
||||
type: secret
|
||||
default: "midgards announce IRCKey"
|
||||
default: "midgards announce IRCKEY"
|
||||
required: true
|
||||
label: Invite command
|
||||
help: Invite auth with the key from https://hdbits.org/bot_invite.php
|
||||
help: Invite auth with the key from https://hdbits.org/bot_invite.php. Replace IRCKEY.
|
||||
|
||||
parse:
|
||||
type: single
|
||||
|
|
|
@ -13,10 +13,13 @@ source: gazelle
|
|||
settings:
|
||||
- name: passkey
|
||||
type: secret
|
||||
required: true
|
||||
label: PassKey
|
||||
help: Right click download on a torrent and get the passkey.
|
||||
|
||||
- name: authkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Auth key
|
||||
help: Right click download on a torrent and get the authkey.
|
||||
|
||||
|
@ -30,22 +33,30 @@ irc:
|
|||
announcers:
|
||||
- HeBoT
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: "Bot nick. Make sure you follow the naming scheme: username|bot"
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: "NickServ account name. Make sure you follow the naming scheme: HebitsNickname|bot"
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your main user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
help: A password of your choice to be used for the bot identification. Save it!
|
||||
help: NickServ password
|
||||
|
||||
- name: invite_command
|
||||
type: secret
|
||||
default: "HeBoT !invite IRCKey"
|
||||
default: "HeBoT !invite IRCKEY"
|
||||
required: true
|
||||
label: Invite command
|
||||
help: "Replace IRCKey with: Edit Profile -> Access Settings -> IRC Key"
|
||||
help: "Replace IRCKEY with: Edit Profile -> Access Settings -> IRC Key"
|
||||
|
||||
parse:
|
||||
type: multi
|
||||
|
|
|
@ -15,6 +15,7 @@ source: custom
|
|||
settings:
|
||||
- name: passkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Passkey
|
||||
help: "Go to https://immortalseed.me/getrss.php to get the RSS feed link and extract passkey from secret_key"
|
||||
regex: '[\?&;]secret_key=([\da-fA-F]{32})'
|
||||
|
@ -29,15 +30,21 @@ irc:
|
|||
announcers:
|
||||
- thoth
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: false
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user_bot
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: nickserv.password
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
required: false
|
||||
label: NickServ Password
|
||||
help: NickServ password
|
||||
|
||||
|
@ -46,7 +53,7 @@ irc:
|
|||
default: "immortal invite USERNAME IRCKEY"
|
||||
required: true
|
||||
label: Invite command
|
||||
help: Invite auth with immortal.
|
||||
help: Invite auth with immortal. Replace USERNAME and IRCKEY.
|
||||
|
||||
parse:
|
||||
type: single
|
||||
|
|
|
@ -15,6 +15,7 @@ source: custom
|
|||
settings:
|
||||
- name: passkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Passkey
|
||||
help: "Go to your profile and copy your passkey"
|
||||
|
||||
|
@ -28,12 +29,19 @@ irc:
|
|||
announcers:
|
||||
- Metal
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user_bot
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
|
|
|
@ -16,6 +16,7 @@ source: unknown
|
|||
settings:
|
||||
- name: passkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Passkey
|
||||
help: "Copy the passkey from your details page."
|
||||
|
||||
|
@ -30,12 +31,19 @@ irc:
|
|||
- IPT
|
||||
- FunTimes
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_autodl
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: false
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user_autodl
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: false
|
||||
label: NickServ Password
|
||||
|
|
|
@ -1,61 +1,69 @@
|
|||
---
|
||||
#id: Milkie
|
||||
name: Milkie
|
||||
identifier: milkie
|
||||
description: Milkie is a private torrent tracker for GENERAL.
|
||||
language: en-us
|
||||
urls:
|
||||
- https://www.milkie.cc
|
||||
privacy: private
|
||||
protocol: torrent
|
||||
supports:
|
||||
- irc
|
||||
- rss
|
||||
source: custom
|
||||
settings:
|
||||
- name: apikey
|
||||
type: secret
|
||||
label: Api key
|
||||
help: "Go to your profile and copy your Api key from settings"
|
||||
regex: /([a-zA-Z0-9\+])
|
||||
|
||||
irc:
|
||||
network: P2P-Network
|
||||
server: irc.p2p-network.net
|
||||
port: 6697
|
||||
tls: true
|
||||
channels:
|
||||
- "#milkie-announce"
|
||||
announcers:
|
||||
- the_cow
|
||||
- the_cow1
|
||||
- the_cow2
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user_bot
|
||||
- name: nickserv.password
|
||||
type: secret
|
||||
required: false
|
||||
label: NickServ Password
|
||||
help: NickServ password
|
||||
|
||||
parse:
|
||||
type: single
|
||||
lines:
|
||||
- test:
|
||||
- "{tv} :: The.Great.Xmas.Show.S00E00.1080p.WEB.H264-TEST :: [1080p, web] :: https://milkie.cc/browse/xxxxxxxxxxxx"
|
||||
pattern: '{(.*)}\s::\s(.*)\s::\s\[(.*)\]\s::\s(https?\:\/\/[^\/]+\/)browse\/(.*)'
|
||||
vars:
|
||||
- category
|
||||
- torrentName
|
||||
- releaseTags
|
||||
- baseUrl
|
||||
- torrentId
|
||||
|
||||
match:
|
||||
torrenturl: "{{ .baseUrl }}api/v1/torrents/{{ .torrentId }}/torrent?key={{ .apikey }}"
|
||||
encode:
|
||||
- apikey
|
||||
---
|
||||
#id: Milkie
|
||||
name: Milkie
|
||||
identifier: milkie
|
||||
description: Milkie is a private torrent tracker for GENERAL.
|
||||
language: en-us
|
||||
urls:
|
||||
- https://www.milkie.cc
|
||||
privacy: private
|
||||
protocol: torrent
|
||||
supports:
|
||||
- irc
|
||||
- rss
|
||||
source: custom
|
||||
settings:
|
||||
- name: apikey
|
||||
type: secret
|
||||
required: true
|
||||
label: Api key
|
||||
help: "Go to your profile and copy your Api key from settings"
|
||||
regex: /([a-zA-Z0-9\+])
|
||||
|
||||
irc:
|
||||
network: P2P-Network
|
||||
server: irc.p2p-network.net
|
||||
port: 6697
|
||||
tls: true
|
||||
channels:
|
||||
- "#milkie-announce"
|
||||
announcers:
|
||||
- the_cow
|
||||
- the_cow1
|
||||
- the_cow2
|
||||
settings:
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: false
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: false
|
||||
label: NickServ Password
|
||||
help: NickServ password
|
||||
|
||||
parse:
|
||||
type: single
|
||||
lines:
|
||||
- test:
|
||||
- "{tv} :: The.Great.Xmas.Show.S00E00.1080p.WEB.H264-TEST :: [1080p, web] :: https://milkie.cc/browse/xxxxxxxxxxxx"
|
||||
pattern: '{(.*)}\s::\s(.*)\s::\s\[(.*)\]\s::\s(https?\:\/\/[^\/]+\/)browse\/(.*)'
|
||||
vars:
|
||||
- category
|
||||
- torrentName
|
||||
- releaseTags
|
||||
- baseUrl
|
||||
- torrentId
|
||||
|
||||
match:
|
||||
torrenturl: "{{ .baseUrl }}api/v1/torrents/{{ .torrentId }}/torrent?key={{ .apikey }}"
|
||||
encode:
|
||||
- apikey
|
||||
|
|
|
@ -15,10 +15,13 @@ source: gazelle
|
|||
settings:
|
||||
- name: authkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Auth key
|
||||
help: Right click DL on a torrent and get the authkey.
|
||||
|
||||
- name: torrent_pass
|
||||
type: secret
|
||||
required: true
|
||||
label: Torrent pass
|
||||
help: Right click DL on a torrent and get the torrent_pass.
|
||||
|
||||
|
@ -32,12 +35,19 @@ irc:
|
|||
announcers:
|
||||
- Jarvis
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user_bot
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
|
|
|
@ -15,6 +15,7 @@ source: custom
|
|||
settings:
|
||||
- name: cookie
|
||||
type: secret
|
||||
required: true
|
||||
label: Cookie (mam_id)
|
||||
help: "Check how to get cookies in your browser and find the mam_id cookie. Changes monthly"
|
||||
|
||||
|
@ -28,12 +29,19 @@ irc:
|
|||
announcers:
|
||||
- MouseBot
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user_bot
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot. Use main nick here.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
|
|
|
@ -14,6 +14,7 @@ source: unknown
|
|||
settings:
|
||||
- name: passkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Passkey
|
||||
help: "Check a torrent download link. key='value' is your passkey."
|
||||
|
||||
|
@ -27,13 +28,19 @@ irc:
|
|||
announcers:
|
||||
- nCore
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user|autodl
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user|autodl
|
||||
|
||||
- name: nickserv.password
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: false
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: false
|
||||
label: NickServ Password
|
||||
|
@ -41,10 +48,10 @@ irc:
|
|||
|
||||
- name: invite_command
|
||||
type: secret
|
||||
default: "NBOT !invite <KEY>"
|
||||
default: "NBOT !invite IRCKEY"
|
||||
required: true
|
||||
label: Invite command
|
||||
help: Invite auth with the key from https://ncore.pro/irc.php
|
||||
help: Invite auth with the key from https://ncore.pro/irc.php. Replace IRCKEY
|
||||
|
||||
parse:
|
||||
type: single
|
||||
|
|
|
@ -15,10 +15,13 @@ source: gazelle
|
|||
settings:
|
||||
- name: authkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Auth key
|
||||
help: Right click DL on a torrent and get the authkey.
|
||||
|
||||
- name: torrent_pass
|
||||
type: secret
|
||||
required: true
|
||||
label: Torrent pass
|
||||
help: Right click DL on a torrent and get the torrent_pass.
|
||||
|
||||
|
@ -32,24 +35,30 @@ irc:
|
|||
announcers:
|
||||
- DRADIS
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Like user|bot
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user|bot
|
||||
|
||||
- name: nickserv.password
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: false
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
required: false
|
||||
label: NickServ Password
|
||||
help: NickServ password
|
||||
|
||||
- name: invite_command
|
||||
type: secret
|
||||
default: "Muffit bot #nbl-announce USERNAME IRCKey"
|
||||
default: "Muffit bot #nbl-announce USERNAME IRCKEY"
|
||||
required: true
|
||||
label: Invite command
|
||||
help: Invite auth with Muffit.
|
||||
help: Invite auth with Muffit. Replace USERNAME and IRCKEY.
|
||||
|
||||
parse:
|
||||
type: single
|
||||
|
|
|
@ -15,6 +15,7 @@ source: custom
|
|||
settings:
|
||||
- name: passkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Passkey
|
||||
help: "Copy passkey from a download link"
|
||||
|
||||
|
@ -28,12 +29,19 @@ irc:
|
|||
announcers:
|
||||
- NB
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Use primary nick or ask staff to allow grouped nick.
|
||||
- name: nickserv.password
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
|
|
|
@ -15,10 +15,13 @@ source: gazelle
|
|||
settings:
|
||||
- name: authkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Auth key
|
||||
help: Right click DL on a torrent and get the authkey.
|
||||
|
||||
- name: torrent_pass
|
||||
type: secret
|
||||
required: true
|
||||
label: Torrent pass
|
||||
help: Right click DL on a torrent and get the torrent_pass.
|
||||
|
||||
|
@ -32,22 +35,30 @@ irc:
|
|||
announcers:
|
||||
- Udon
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user|bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: false
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user|bot
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: false
|
||||
label: NickServ Password
|
||||
help: NickServ password
|
||||
|
||||
- name: invite_command
|
||||
type: secret
|
||||
default: "Udon KNOCK oppaitime-announce [username] [irckey]"
|
||||
default: "Udon KNOCK oppaitime-announce USERNAME IRCKEY"
|
||||
required: true
|
||||
label: Invite command
|
||||
help: Invite auth with Udon. Replace [username] site username and [irckey] with your IRC key.
|
||||
help: Invite auth with Udon. Replace USERNAME site username and IRCKEY with your IRC key.
|
||||
|
||||
# Categories
|
||||
# Movies
|
||||
|
|
|
@ -15,6 +15,7 @@ source: gazelle
|
|||
settings:
|
||||
- name: torrent_pass
|
||||
type: text
|
||||
required: true
|
||||
label: Torrent pass
|
||||
help: Right click DL on a torrent and get the torrent_pass.
|
||||
|
||||
|
@ -28,22 +29,30 @@ irc:
|
|||
announcers:
|
||||
- hermes
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user|bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user|bot
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
help: NickServ password
|
||||
|
||||
- name: invite_command
|
||||
type: secret
|
||||
default: "hermes enter #announce USERNAME IRCKey"
|
||||
default: "hermes enter #announce USERNAME IRCKEY"
|
||||
required: true
|
||||
label: Invite command
|
||||
help: Invite auth with Hermes.
|
||||
help: Invite auth with Hermes. Replace USERNAME and IRCKEY.
|
||||
|
||||
parse:
|
||||
type: single
|
||||
|
|
|
@ -15,10 +15,13 @@ source: gazelle
|
|||
settings:
|
||||
- name: authkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Auth key
|
||||
help: Right click DL on a torrent and get the authkey.
|
||||
|
||||
- name: torrent_pass
|
||||
type: secret
|
||||
required: true
|
||||
label: Torrent pass
|
||||
help: Right click DL on a torrent and get the torrent_pass.
|
||||
|
||||
|
@ -32,12 +35,19 @@ irc:
|
|||
announcers:
|
||||
- "PB-Announcer"
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user_bot.
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
|
|
|
@ -15,6 +15,7 @@ source: custom
|
|||
settings:
|
||||
- name: passkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Passkey
|
||||
help: "Copy your passkey from the RSS feed"
|
||||
|
||||
|
@ -28,13 +29,19 @@ irc:
|
|||
announcers:
|
||||
- PS-Info
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: false
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user_bot
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: nickserv.password
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
|
@ -42,10 +49,10 @@ irc:
|
|||
|
||||
- name: invite_command
|
||||
type: secret
|
||||
default: "PS-Info pass <IRC_KEY>"
|
||||
default: "PS-Info pass IRCKEY"
|
||||
required: true
|
||||
label: Invite command
|
||||
help: Invite auth with PS-Info. Replace <IRC_KEY> with your IRC key.
|
||||
help: Invite auth with PS-Info. Replace IRCKEY with your IRC key.
|
||||
|
||||
|
||||
parse:
|
||||
|
|
|
@ -15,6 +15,7 @@ source: custom
|
|||
settings:
|
||||
- name: rsskey
|
||||
type: secret
|
||||
required: true
|
||||
label: RSS key
|
||||
help: "Go to your profile and copy your RSS key"
|
||||
|
||||
|
@ -28,13 +29,19 @@ irc:
|
|||
announcers:
|
||||
- PT-BOT
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: false
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user_bot
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: nickserv.password
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
|
@ -42,10 +49,10 @@ irc:
|
|||
|
||||
- name: invite_command
|
||||
type: secret
|
||||
default: "PT-BOT invite IRC_KEY"
|
||||
default: "PT-BOT invite IRCKEY"
|
||||
required: true
|
||||
label: Invite command
|
||||
help: Invite auth with PT-BOT. Replace IRC_KEY with your IRC key.
|
||||
help: Invite auth with PT-BOT. Replace IRCKEY with your IRC key.
|
||||
|
||||
parse:
|
||||
type: single
|
||||
|
|
|
@ -1,61 +1,69 @@
|
|||
---
|
||||
#id: tracker69
|
||||
name: PreToMe
|
||||
identifier: pretome
|
||||
description: PreToMe (PTM) is 0Day/General ratioless tracker with very good speed & Pretime.
|
||||
language: en-us
|
||||
urls:
|
||||
- https://pretome.info/
|
||||
privacy: private
|
||||
protocol: torrent
|
||||
supports:
|
||||
- irc
|
||||
- rss
|
||||
source: custom
|
||||
settings:
|
||||
- name: rsskey
|
||||
type: secret
|
||||
label: RSS key
|
||||
help: "Copy your RSS key from the RSS feed"
|
||||
regex: /([\da-fA-F]{32})
|
||||
|
||||
irc:
|
||||
network: PreToMe
|
||||
server: irc.pretome.info
|
||||
port: 6697
|
||||
tls: true
|
||||
channels:
|
||||
- "#announce"
|
||||
announcers:
|
||||
- PTMbot
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user_bot
|
||||
- name: nickserv.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
help: NickServ password
|
||||
|
||||
parse:
|
||||
type: single
|
||||
lines:
|
||||
- test:
|
||||
- "tehFire: [Applications|Windows] Chen went to the Mall :: preGAP: 1m and 32s :: https://pretome.info/details.php?id=696969"
|
||||
- "[Movies|x264] Orlando.Bloom.Had.A.Cow-ze0s :: preGAP: P2P source :: https://pretome.info/details.php?id=646321"
|
||||
- "tehFIRE: [TV|XviD] Royal.Institution.Christmas.Lectures.2009.Part2.WS.PDTV.XviD-WATERS :: preGAP: 1m and 9s :: https://pretome.info/details.php?id=127107"
|
||||
- "tehFIRE: [TV|x264] Newsreaders.S01E05.HDTV.x264-2HD https://pretome.info/details.php?id=333951"
|
||||
pattern: '\[([^\]]+)\] ([^:]+)(?: :: [^:]+:.* :: )?(https?\:\/\/[^\/]+).*id=(\d+)'
|
||||
vars:
|
||||
- category
|
||||
- torrentName
|
||||
- baseUrl
|
||||
- torrentId
|
||||
|
||||
match:
|
||||
torrenturl: "{{ .baseUrl }}/download.php/{{ .torrentId }}/{{ .rsskey }}/{{ .torrentName }}.torrent"
|
||||
encode:
|
||||
- torrentName
|
||||
---
|
||||
#id: tracker69
|
||||
name: PreToMe
|
||||
identifier: pretome
|
||||
description: PreToMe (PTM) is 0Day/General ratioless tracker with very good speed & Pretime.
|
||||
language: en-us
|
||||
urls:
|
||||
- https://pretome.info/
|
||||
privacy: private
|
||||
protocol: torrent
|
||||
supports:
|
||||
- irc
|
||||
- rss
|
||||
source: custom
|
||||
settings:
|
||||
- name: rsskey
|
||||
type: secret
|
||||
required: true
|
||||
label: RSS key
|
||||
help: "Copy your RSS key from the RSS feed"
|
||||
regex: /([\da-fA-F]{32})
|
||||
|
||||
irc:
|
||||
network: PreToMe
|
||||
server: irc.pretome.info
|
||||
port: 6697
|
||||
tls: true
|
||||
channels:
|
||||
- "#announce"
|
||||
announcers:
|
||||
- PTMbot
|
||||
settings:
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
help: NickServ password
|
||||
|
||||
parse:
|
||||
type: single
|
||||
lines:
|
||||
- test:
|
||||
- "tehFire: [Applications|Windows] Chen went to the Mall :: preGAP: 1m and 32s :: https://pretome.info/details.php?id=696969"
|
||||
- "[Movies|x264] Orlando.Bloom.Had.A.Cow-ze0s :: preGAP: P2P source :: https://pretome.info/details.php?id=646321"
|
||||
- "tehFIRE: [TV|XviD] Royal.Institution.Christmas.Lectures.2009.Part2.WS.PDTV.XviD-WATERS :: preGAP: 1m and 9s :: https://pretome.info/details.php?id=127107"
|
||||
- "tehFIRE: [TV|x264] Newsreaders.S01E05.HDTV.x264-2HD https://pretome.info/details.php?id=333951"
|
||||
pattern: '\[([^\]]+)\] ([^:]+)(?: :: [^:]+:.* :: )?(https?\:\/\/[^\/]+).*id=(\d+)'
|
||||
vars:
|
||||
- category
|
||||
- torrentName
|
||||
- baseUrl
|
||||
- torrentId
|
||||
|
||||
match:
|
||||
torrenturl: "{{ .baseUrl }}/download.php/{{ .torrentId }}/{{ .rsskey }}/{{ .torrentName }}.torrent"
|
||||
encode:
|
||||
- torrentName
|
||||
|
|
|
@ -16,18 +16,25 @@ source: gazelle
|
|||
settings:
|
||||
- name: authkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Auth key
|
||||
help: Right click DL on a torrent and get the authkey.
|
||||
|
||||
- name: torrent_pass
|
||||
type: secret
|
||||
required: true
|
||||
label: Torrent pass
|
||||
help: Right click DL on a torrent and get the torrent_pass.
|
||||
|
||||
- name: api_user
|
||||
type: secret
|
||||
required: true
|
||||
label: API User
|
||||
help: Edit profile -> Security -> Generate new api keys
|
||||
|
||||
- name: api_key
|
||||
type: secret
|
||||
required: true
|
||||
label: API Key
|
||||
help: Edit profile -> Security -> Generate new api keys
|
||||
|
||||
|
@ -57,22 +64,30 @@ irc:
|
|||
announcers:
|
||||
- Hummingbird
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user|autodl
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user|autodl
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
help: NickServ password
|
||||
|
||||
- name: invite_command
|
||||
type: secret
|
||||
default: "Hummingbird ENTER USERNAME IRCKey #ptp-announce-dev"
|
||||
default: "Hummingbird ENTER USERNAME IRCKEY #ptp-announce-dev"
|
||||
required: true
|
||||
label: Invite command
|
||||
help: Invite auth with Hummingbird.
|
||||
help: Invite auth with Hummingbird. Replace USERNAME and IRCKEY.
|
||||
|
||||
parse:
|
||||
type: single
|
||||
|
|
|
@ -15,6 +15,7 @@ source: custom
|
|||
settings:
|
||||
- name: rsskey
|
||||
type: secret
|
||||
required: true
|
||||
label: RSS key
|
||||
help: "Copy your RSS key from the RSS feed"
|
||||
regex: /([\da-fA-F]{20})
|
||||
|
@ -29,12 +30,19 @@ irc:
|
|||
announcers:
|
||||
- _PussyBot_
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: false
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user_bot
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: false
|
||||
label: NickServ Password
|
||||
|
|
|
@ -16,14 +16,19 @@ source: gazelle
|
|||
settings:
|
||||
- name: authkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Auth key
|
||||
help: Right click DL on a torrent and get the authkey.
|
||||
|
||||
- name: torrent_pass
|
||||
type: secret
|
||||
required: true
|
||||
label: Torrent pass
|
||||
help: Right click DL on a torrent and get the torrent_pass.
|
||||
|
||||
- name: api_key
|
||||
type: secret
|
||||
required: true
|
||||
label: API Key
|
||||
help: Settings -> Account Settings -> API Keys - Generate new api keys. Scope (User, Torrents)
|
||||
|
||||
|
@ -49,22 +54,30 @@ irc:
|
|||
announcers:
|
||||
- Drone
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user-autodl
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user-autodl
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
help: NickServ password
|
||||
|
||||
- name: invite_command
|
||||
type: secret
|
||||
default: "Drone enter #red-announce USERNAME IRCKey"
|
||||
default: "Drone enter #red-announce USERNAME IRCKEY"
|
||||
required: true
|
||||
label: Invite command
|
||||
help: Invite auth with Drone.
|
||||
help: Invite auth with Drone. Replace USERNAME and IRCKEY.
|
||||
|
||||
parse:
|
||||
type: single
|
||||
|
|
|
@ -15,6 +15,7 @@ source: custom
|
|||
settings:
|
||||
- name: passkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Passkey
|
||||
help: "Go to User CP, User CP Home and copy the passkey"
|
||||
|
||||
|
@ -31,12 +32,19 @@ irc:
|
|||
- retroflix-announcer2
|
||||
- retroflix-announcer3
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user_bot
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
|
|
|
@ -15,6 +15,7 @@ source: custom
|
|||
settings:
|
||||
- name: passkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Passkey
|
||||
help: "Copy the passkey from a download link"
|
||||
|
||||
|
@ -28,16 +29,24 @@ irc:
|
|||
announcers:
|
||||
- RevoTT
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_autodl
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: false
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user_autodl
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: false
|
||||
label: NickServ Password
|
||||
help: NickServ password
|
||||
|
||||
- name: invite_command
|
||||
type: secret
|
||||
default: "RevoTT !invite USERNAME PASSKEY"
|
||||
|
|
|
@ -15,6 +15,7 @@ source: custom
|
|||
settings:
|
||||
- name: passkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Passkey
|
||||
help: "Go to https://scenehd.org/getrss.php and extract your Passkey"
|
||||
|
||||
|
@ -28,12 +29,19 @@ irc:
|
|||
announcers:
|
||||
- SceneHD
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: false
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user_bot
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: false
|
||||
label: NickServ Password
|
||||
|
@ -41,10 +49,10 @@ irc:
|
|||
|
||||
- name: invite_command
|
||||
type: secret
|
||||
default: "SceneHD .invite <IRC_KEY> #annnonce"
|
||||
default: "SceneHD .invite IRCKEY #annnonce"
|
||||
required: true
|
||||
label: Invite command
|
||||
help: Invite auth with SceneHD. Replace <IRC_KEY> with your IRC key
|
||||
help: Invite auth with SceneHD. Replace IRCKEY with your IRC key
|
||||
|
||||
parse:
|
||||
type: single
|
||||
|
|
|
@ -14,6 +14,7 @@ source: unknown
|
|||
settings:
|
||||
- name: passkey
|
||||
type: secret
|
||||
required: true
|
||||
label: PassKey
|
||||
help: Copy the passkey from your profile
|
||||
|
||||
|
@ -27,12 +28,19 @@ irc:
|
|||
announcers:
|
||||
- speedapp-announcer
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your main user and bot.
|
||||
|
||||
- name: nickserv.password
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
|
|
|
@ -23,12 +23,19 @@ irc:
|
|||
announcers:
|
||||
- "Katou"
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account.
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your main user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
|
|
|
@ -15,6 +15,7 @@ source: rartracker
|
|||
settings:
|
||||
- name: passkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Passkey
|
||||
help: "Copy the passkey from the /rss page."
|
||||
|
||||
|
@ -28,12 +29,19 @@ irc:
|
|||
announcers:
|
||||
- SuperBits
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user-bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: false
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user-bot
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: false
|
||||
label: NickServ Password
|
||||
|
|
|
@ -15,6 +15,7 @@ source: custom
|
|||
settings:
|
||||
- name: cookie
|
||||
type: secret
|
||||
required: true
|
||||
label: Cookie
|
||||
help: "Check how to get cookies in your browser and find the uid and pass cookies. Example: uid=1234; pass=asdf12347asdf13"
|
||||
|
||||
|
@ -28,16 +29,24 @@ irc:
|
|||
announcers:
|
||||
- ByteMe
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user-bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user-bot
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
help: NickServ password
|
||||
|
||||
- name: invite_command
|
||||
type: secret
|
||||
default: "erica letmeinannounce USERNAME IRCKEY"
|
||||
|
|
|
@ -1,60 +1,68 @@
|
|||
---
|
||||
#id: torrentday
|
||||
name: TorrentDay
|
||||
identifier: torrentday
|
||||
description: TorrentDay (TD) is a private torrent tracker for GENERAL.
|
||||
language: en-us
|
||||
urls:
|
||||
- https://www.torrentday.com
|
||||
privacy: private
|
||||
protocol: torrent
|
||||
supports:
|
||||
- irc
|
||||
- rss
|
||||
source: custom
|
||||
settings:
|
||||
- name: passkey
|
||||
type: secret
|
||||
label: Passkey
|
||||
help: "Create a RSS Link to find out your PASSKEY"
|
||||
|
||||
irc:
|
||||
network: TorrentDay
|
||||
server: irc.torrentday.com
|
||||
port: 6697
|
||||
tls: true
|
||||
channels:
|
||||
- "#td.announce"
|
||||
announcers:
|
||||
- TD_Announce
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. username_autodl
|
||||
- name: nickserv.password
|
||||
type: secret
|
||||
required: false
|
||||
label: NickServ Password
|
||||
help: NickServ password
|
||||
|
||||
parse:
|
||||
type: single
|
||||
lines:
|
||||
- test:
|
||||
- "[Movie/4K] This is a Movie 2160p UHD BluRay x265-TEST - https://www.torrentday.com/details.php?id=0000000 - 5.83 GB"
|
||||
- "[Movie/4K] This is a Movie 2160p UHD BluRay x265-TEST FREELEECH - https://www.torrentday.com/details.php?id=0000000 - 5.83 GB"
|
||||
pattern: '\[([^\]]*)] (.*?)\s*(FREELEECH)*\s*-\s+(https?\:\/\/[^\/]+).*[&\?]id=(\d+)\s*- (.*)'
|
||||
vars:
|
||||
- category
|
||||
- torrentName
|
||||
- freeleech
|
||||
- baseUrl
|
||||
- torrentId
|
||||
- torrentSize
|
||||
|
||||
match:
|
||||
torrenturl: "{{ .baseUrl }}/download.php/{{ .torrentId }}/{{ .torrentName }}.torrent?torrent_pass={{ .passkey }}"
|
||||
encode:
|
||||
- torrentName
|
||||
---
|
||||
#id: torrentday
|
||||
name: TorrentDay
|
||||
identifier: torrentday
|
||||
description: TorrentDay (TD) is a private torrent tracker for GENERAL.
|
||||
language: en-us
|
||||
urls:
|
||||
- https://www.torrentday.com
|
||||
privacy: private
|
||||
protocol: torrent
|
||||
supports:
|
||||
- irc
|
||||
- rss
|
||||
source: custom
|
||||
settings:
|
||||
- name: passkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Passkey
|
||||
help: "Create a RSS Link to find out your PASSKEY"
|
||||
|
||||
irc:
|
||||
network: TorrentDay
|
||||
server: irc.torrentday.com
|
||||
port: 6697
|
||||
tls: true
|
||||
channels:
|
||||
- "#td.announce"
|
||||
announcers:
|
||||
- TD_Announce
|
||||
settings:
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_autodl
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: false
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: false
|
||||
label: NickServ Password
|
||||
help: NickServ password
|
||||
|
||||
parse:
|
||||
type: single
|
||||
lines:
|
||||
- test:
|
||||
- "[Movie/4K] This is a Movie 2160p UHD BluRay x265-TEST - https://www.torrentday.com/details.php?id=0000000 - 5.83 GB"
|
||||
- "[Movie/4K] This is a Movie 2160p UHD BluRay x265-TEST FREELEECH - https://www.torrentday.com/details.php?id=0000000 - 5.83 GB"
|
||||
pattern: '\[([^\]]*)] (.*?)\s*(FREELEECH)*\s*-\s+(https?\:\/\/[^\/]+).*[&\?]id=(\d+)\s*- (.*)'
|
||||
vars:
|
||||
- category
|
||||
- torrentName
|
||||
- freeleech
|
||||
- baseUrl
|
||||
- torrentId
|
||||
- torrentSize
|
||||
|
||||
match:
|
||||
torrenturl: "{{ .baseUrl }}/download.php/{{ .torrentId }}/{{ .torrentName }}.torrent?torrent_pass={{ .passkey }}"
|
||||
encode:
|
||||
- torrentName
|
||||
|
|
|
@ -15,6 +15,7 @@ source: custom
|
|||
settings:
|
||||
- name: passkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Passkey
|
||||
help: "Go to your profile and copy the PID (passkey)"
|
||||
|
||||
|
@ -28,12 +29,19 @@ irc:
|
|||
announcers:
|
||||
- TDBot
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: false
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user_bot
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: false
|
||||
label: NickServ Password
|
||||
|
|
|
@ -15,6 +15,7 @@ source: custom
|
|||
settings:
|
||||
- name: rsskey
|
||||
type: secret
|
||||
required: true
|
||||
label: RSS key
|
||||
help: "Go to your profile and copy your RSS key"
|
||||
regex: /([\da-fA-F]{20})
|
||||
|
@ -29,12 +30,19 @@ irc:
|
|||
announcers:
|
||||
- _AnnounceBot_
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: false
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user_bot
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: false
|
||||
label: NickServ Password
|
||||
|
|
|
@ -15,6 +15,7 @@ source: unknown
|
|||
settings:
|
||||
- name: passkey
|
||||
type: secret
|
||||
required: true
|
||||
label: PassKey
|
||||
help: "Home -> RSS -> Extract PassKey from URL"
|
||||
|
||||
|
@ -28,12 +29,19 @@ irc:
|
|||
announcers:
|
||||
- "|TN|"
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user|bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. E.g. user|bot
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
|
|
|
@ -1,63 +1,72 @@
|
|||
---
|
||||
#id: TorrentSeeds
|
||||
name: TorrentSeeds
|
||||
identifier: torrentseeds
|
||||
description: TorrentSeeds (TS) is a GENERAL/0-DAY tracker with great pretimes.
|
||||
language: en-us
|
||||
urls:
|
||||
- https://torrentseeds.org
|
||||
privacy: private
|
||||
protocol: torrent
|
||||
supports:
|
||||
- irc
|
||||
- rss
|
||||
source: UNIT3D
|
||||
settings:
|
||||
- name: rsskey
|
||||
type: secret
|
||||
label: Rss key
|
||||
help: "Click on your nick / Go to Security / Copy the RID (RSS Key) and paste it here."
|
||||
|
||||
irc:
|
||||
network: Torrentseeds.org
|
||||
server: irc.torrentseeds.org
|
||||
port: 6697
|
||||
tls: true
|
||||
channels:
|
||||
- "#announce"
|
||||
announcers:
|
||||
- torrentseeds
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user_bot
|
||||
- name: nickserv.password
|
||||
type: secret
|
||||
required: false
|
||||
label: NickServ Password
|
||||
help: NickServ password
|
||||
- name: invite_command
|
||||
type: secret
|
||||
default: "Cerberus identify USERNAME IRCKEY"
|
||||
required: true
|
||||
label: Invite command
|
||||
help: Invite auth with Cerberus. Replace USERNAME and IRCKEY
|
||||
|
||||
parse:
|
||||
type: single
|
||||
lines:
|
||||
- test:
|
||||
- "New: This.Is.A.New.show.S00E00.720p.WEB.H264-Test .:. Category: TV/HD .:. Size: 364.82 MB .:. URL: https://www.torrentseeds.org/details.php?id=000000 .:. Uploaded by: George."
|
||||
pattern: 'New: (.*) \.:\. Category: (.*) \.:\. Size: (.*) \.:\. URL: (https?\:\/\/[^\/]+).*\/(\d{6,9}) \.:\. Uploaded by: (.*)\.'
|
||||
vars:
|
||||
- torrentName
|
||||
- category
|
||||
- torrentSize
|
||||
- baseUrl
|
||||
- torrentId
|
||||
- uploader
|
||||
|
||||
match:
|
||||
torrenturl: "{{ .baseUrl }}/torrent/download/{{ .torrentId }}.{{ .rsskey }}"
|
||||
---
|
||||
#id: TorrentSeeds
|
||||
name: TorrentSeeds
|
||||
identifier: torrentseeds
|
||||
description: TorrentSeeds (TS) is a GENERAL/0-DAY tracker with great pretimes.
|
||||
language: en-us
|
||||
urls:
|
||||
- https://torrentseeds.org
|
||||
privacy: private
|
||||
protocol: torrent
|
||||
supports:
|
||||
- irc
|
||||
- rss
|
||||
source: UNIT3D
|
||||
settings:
|
||||
- name: rsskey
|
||||
type: secret
|
||||
required: true
|
||||
label: RSS key
|
||||
help: "Click on your nick / Go to Settings / Security / Copy the RID (RSS Key) and paste it here."
|
||||
|
||||
irc:
|
||||
network: Torrentseeds.org
|
||||
server: irc.torrentseeds.org
|
||||
port: 6697
|
||||
tls: true
|
||||
channels:
|
||||
- "#announce"
|
||||
announcers:
|
||||
- torrentseeds
|
||||
settings:
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: false
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: false
|
||||
label: NickServ Password
|
||||
help: NickServ password
|
||||
|
||||
- name: invite_command
|
||||
type: secret
|
||||
default: "Cerberus identify USERNAME PID"
|
||||
required: true
|
||||
label: Invite command
|
||||
help: Invite auth with Cerberus. Replace USERNAME and PID (passkey).
|
||||
|
||||
parse:
|
||||
type: single
|
||||
lines:
|
||||
- test:
|
||||
- "New: This.Is.A.New.show.S00E00.720p.WEB.H264-Test .:. Category: TV/HD .:. Size: 364.82 MB .:. URL: https://www.torrentseeds.org/details.php?id=000000 .:. Uploaded by: George."
|
||||
pattern: 'New: (.*) \.:\. Category: (.*) \.:\. Size: (.*) \.:\. URL: (https?\:\/\/[^\/]+).*\/(\d{6,9}) \.:\. Uploaded by: (.*)\.'
|
||||
vars:
|
||||
- torrentName
|
||||
- category
|
||||
- torrentSize
|
||||
- baseUrl
|
||||
- torrentId
|
||||
- uploader
|
||||
|
||||
match:
|
||||
torrenturl: "{{ .baseUrl }}/torrent/download/{{ .torrentId }}.{{ .rsskey }}"
|
||||
|
|
|
@ -15,6 +15,7 @@ source: unknown
|
|||
settings:
|
||||
- name: api_key
|
||||
type: secret
|
||||
required: true
|
||||
label: Api-Key
|
||||
help: "Generate an apikey with download scope and copy it. Profileinstellungen -> API-Keys -> API-Key erzeugen"
|
||||
|
||||
|
@ -28,16 +29,24 @@ irc:
|
|||
announcers:
|
||||
- Synd1c4t3
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user-bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: false
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user-bot
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: false
|
||||
label: NickServ Password
|
||||
help: NickServ password
|
||||
|
||||
- name: invite_command
|
||||
type: secret
|
||||
default: "Synd1c4t3 invite IRCKEY"
|
||||
|
|
|
@ -15,6 +15,7 @@ source: unknown
|
|||
settings:
|
||||
- name: passkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Passkey
|
||||
help: "Go to https://www.trancetraffic.com/links.php, click on RSS Feed and copy your passkey from the url."
|
||||
|
||||
|
@ -28,12 +29,19 @@ irc:
|
|||
announcers:
|
||||
- TranceTraffic
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user|autodl
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user|autodl
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
|
|
|
@ -15,10 +15,13 @@ source: gazelle
|
|||
settings:
|
||||
- name: authkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Auth key
|
||||
help: Right click DL on a torrent and get the authkey.
|
||||
|
||||
- name: torrent_pass
|
||||
type: secret
|
||||
required: true
|
||||
label: Torrent pass
|
||||
help: Right click DL on a torrent and get the torrent_pass.
|
||||
|
||||
|
@ -33,22 +36,30 @@ irc:
|
|||
- UHDBot
|
||||
- cr0nusbot
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user|autodl
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: true
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user|autodl
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: true
|
||||
label: NickServ Password
|
||||
help: NickServ password
|
||||
|
||||
- name: invite_command
|
||||
type: secret
|
||||
default: "UHDBot invite IRCKey"
|
||||
default: "UHDBot invite IRCKEY"
|
||||
required: true
|
||||
label: Invite command
|
||||
help: Invite auth with UHDBot.
|
||||
help: Invite auth with UHDBot. Replace IRCKEY.
|
||||
|
||||
parse:
|
||||
type: single
|
||||
|
|
|
@ -15,6 +15,7 @@ source: custom
|
|||
settings:
|
||||
- name: passkey
|
||||
type: secret
|
||||
required: true
|
||||
label: Passkey
|
||||
help: "Go to your profile and copy your Passkey"
|
||||
|
||||
|
@ -28,12 +29,19 @@ irc:
|
|||
announcers:
|
||||
- Announce
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: false
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user_bot
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: false
|
||||
label: NickServ Password
|
||||
|
|
|
@ -153,13 +153,10 @@ func (h *Handler) Run() error {
|
|||
subLogger := zstdlog.NewStdLoggerWithLevel(h.log.With().Logger(), zerolog.TraceLevel)
|
||||
|
||||
h.client = &ircevent.Connection{
|
||||
Nick: h.network.NickServ.Account,
|
||||
User: h.network.NickServ.Account,
|
||||
RealName: h.network.NickServ.Account,
|
||||
Nick: h.network.Nick,
|
||||
User: h.network.Auth.Account,
|
||||
RealName: h.network.Auth.Account,
|
||||
Password: h.network.Pass,
|
||||
SASLLogin: h.network.NickServ.Account,
|
||||
SASLPassword: h.network.NickServ.Password,
|
||||
SASLOptional: true,
|
||||
Server: addr,
|
||||
KeepAlive: 4 * time.Minute,
|
||||
Timeout: 2 * time.Minute,
|
||||
|
@ -170,6 +167,15 @@ func (h *Handler) Run() error {
|
|||
Log: subLogger,
|
||||
}
|
||||
|
||||
if h.network.Auth.Mechanism == domain.IRCAuthMechanismSASLPlain {
|
||||
if h.network.Auth.Account != "" && h.network.Auth.Password != "" {
|
||||
h.client.SASLLogin = h.network.Auth.Account
|
||||
h.client.SASLPassword = h.network.Auth.Password
|
||||
h.client.SASLOptional = true
|
||||
h.client.UseSASL = true
|
||||
}
|
||||
}
|
||||
|
||||
if h.network.TLS {
|
||||
h.client.UseTLS = true
|
||||
h.client.TLSConfig = &tls.Config{InsecureSkipVerify: true}
|
||||
|
@ -226,7 +232,7 @@ func (h *Handler) Run() error {
|
|||
func (h *Handler) isOurNick(nick string) bool {
|
||||
h.m.RLock()
|
||||
defer h.m.RUnlock()
|
||||
return h.network.NickServ.Account == nick
|
||||
return h.network.Nick == nick
|
||||
}
|
||||
|
||||
func (h *Handler) isOurCurrentNick(nick string) bool {
|
||||
|
@ -440,7 +446,7 @@ func (h *Handler) handleNickServ(msg ircmsg.Message) {
|
|||
if contains(msg.Params[1], "invalid parameters", "help identify") {
|
||||
h.log.Debug().Msgf("NOTICE nickserv invalid: %v", msg.Params)
|
||||
|
||||
if err := h.client.Send("PRIVMSG", "NickServ", fmt.Sprintf("IDENTIFY %v %v", h.network.NickServ.Account, h.network.NickServ.Password)); err != nil {
|
||||
if err := h.client.Send("PRIVMSG", "NickServ", fmt.Sprintf("IDENTIFY %v %v", h.network.Auth.Account, h.network.Auth.Password)); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
@ -455,9 +461,9 @@ func (h *Handler) authenticate() bool {
|
|||
return true
|
||||
}
|
||||
|
||||
if !h.saslauthed && h.network.NickServ.Password != "" {
|
||||
if !h.saslauthed && h.network.Auth.Password != "" {
|
||||
h.log.Trace().Msg("on connect not authenticated and password not empty: send nickserv identify")
|
||||
if err := h.NickServIdentify(h.network.NickServ.Password); err != nil {
|
||||
if err := h.NickServIdentify(h.network.Auth.Password); err != nil {
|
||||
h.log.Error().Stack().Err(err).Msg("error nickserv")
|
||||
return false
|
||||
}
|
||||
|
|
|
@ -88,7 +88,7 @@ func (s *service) StartHandlers() {
|
|||
|
||||
// use network.Server + nick to use multiple indexers with different nick per network
|
||||
// this allows for multiple handlers to one network
|
||||
s.handlers[handlerKey{network.Server, network.NickServ.Account}] = handler
|
||||
s.handlers[handlerKey{network.Server, network.Nick}] = handler
|
||||
s.lock.Unlock()
|
||||
|
||||
s.log.Debug().Msgf("starting network: %+v", network.Name)
|
||||
|
@ -112,7 +112,7 @@ func (s *service) StopHandlers() {
|
|||
|
||||
func (s *service) startNetwork(network domain.IrcNetwork) error {
|
||||
// look if we have the network in handlers already, if so start it
|
||||
if existingHandler, found := s.handlers[handlerKey{network.Server, network.NickServ.Account}]; found {
|
||||
if existingHandler, found := s.handlers[handlerKey{network.Server, network.Nick}]; found {
|
||||
s.log.Debug().Msgf("starting network: %+v", network.Name)
|
||||
|
||||
if !existingHandler.client.Connected() {
|
||||
|
@ -138,7 +138,7 @@ func (s *service) startNetwork(network domain.IrcNetwork) error {
|
|||
// init new irc handler
|
||||
handler := NewHandler(s.log, network, definitions, s.releaseService, s.notificationService)
|
||||
|
||||
s.handlers[handlerKey{network.Server, network.NickServ.Account}] = handler
|
||||
s.handlers[handlerKey{network.Server, network.Nick}] = handler
|
||||
s.lock.Unlock()
|
||||
|
||||
s.log.Debug().Msgf("starting network: %+v", network.Name)
|
||||
|
@ -155,7 +155,7 @@ func (s *service) startNetwork(network domain.IrcNetwork) error {
|
|||
|
||||
func (s *service) checkIfNetworkRestartNeeded(network *domain.IrcNetwork) error {
|
||||
// look if we have the network in handlers, if so restart it
|
||||
if existingHandler, found := s.handlers[handlerKey{network.Server, network.NickServ.Account}]; found {
|
||||
if existingHandler, found := s.handlers[handlerKey{network.Server, network.Nick}]; found {
|
||||
s.log.Debug().Msgf("irc: decide if irc network handler needs restart or updating: %+v", network.Server)
|
||||
|
||||
// if server, tls, invite command, port : changed - restart
|
||||
|
@ -192,17 +192,17 @@ func (s *service) checkIfNetworkRestartNeeded(network *domain.IrcNetwork) error
|
|||
return nil
|
||||
}
|
||||
|
||||
if handler.NickServ.Account != network.NickServ.Account {
|
||||
if handler.Nick != network.Nick {
|
||||
s.log.Debug().Msg("changing nick")
|
||||
|
||||
if err := existingHandler.NickChange(network.NickServ.Account); err != nil {
|
||||
s.log.Error().Stack().Err(err).Msgf("failed to change nick %q", network.NickServ.Account)
|
||||
if err := existingHandler.NickChange(network.Nick); err != nil {
|
||||
s.log.Error().Stack().Err(err).Msgf("failed to change nick %q", network.Nick)
|
||||
}
|
||||
} else if handler.NickServ.Password != network.NickServ.Password {
|
||||
} else if handler.Auth.Password != network.Auth.Password {
|
||||
s.log.Debug().Msg("nickserv: changing password")
|
||||
|
||||
if err := existingHandler.NickServIdentify(network.NickServ.Password); err != nil {
|
||||
s.log.Error().Stack().Err(err).Msgf("failed to identify with nickserv %q", network.NickServ.Account)
|
||||
if err := existingHandler.NickServIdentify(network.Auth.Password); err != nil {
|
||||
s.log.Error().Stack().Err(err).Msgf("failed to identify with nickserv %q", network.Nick)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -291,7 +291,7 @@ func (s *service) RestartNetwork(ctx context.Context, id int64) error {
|
|||
|
||||
func (s *service) restartNetwork(network domain.IrcNetwork) error {
|
||||
// look if we have the network in handlers, if so restart it
|
||||
if existingHandler, found := s.handlers[handlerKey{network.Server, network.NickServ.Account}]; found {
|
||||
if existingHandler, found := s.handlers[handlerKey{network.Server, network.Nick}]; found {
|
||||
s.log.Info().Msgf("restarting network: %v", network.Name)
|
||||
|
||||
if existingHandler.client.Connected() {
|
||||
|
@ -396,14 +396,15 @@ func (s *service) GetNetworksWithHealth(ctx context.Context) ([]domain.IrcNetwor
|
|||
Port: n.Port,
|
||||
TLS: n.TLS,
|
||||
Pass: n.Pass,
|
||||
Nick: n.Nick,
|
||||
Auth: n.Auth,
|
||||
InviteCommand: n.InviteCommand,
|
||||
NickServ: n.NickServ,
|
||||
Connected: false,
|
||||
Channels: []domain.ChannelWithHealth{},
|
||||
ConnectionErrors: []string{},
|
||||
}
|
||||
|
||||
handler, ok := s.handlers[handlerKey{n.Server, n.NickServ.Account}]
|
||||
handler, ok := s.handlers[handlerKey{n.Server, n.Nick}]
|
||||
if ok {
|
||||
handler.m.RLock()
|
||||
|
||||
|
@ -484,7 +485,7 @@ func (s *service) DeleteNetwork(ctx context.Context, id int64) error {
|
|||
|
||||
// Remove network and handler
|
||||
//if err = s.StopNetwork(network.Server); err != nil {
|
||||
if err = s.StopAndRemoveNetwork(handlerKey{network.Server, network.NickServ.Account}); err != nil {
|
||||
if err = s.StopAndRemoveNetwork(handlerKey{network.Server, network.Nick}); err != nil {
|
||||
s.log.Error().Stack().Err(err).Msgf("could not stop and delete network: %v", network.Name)
|
||||
return err
|
||||
}
|
||||
|
@ -524,7 +525,7 @@ func (s *service) UpdateNetwork(ctx context.Context, network *domain.IrcNetwork)
|
|||
|
||||
} else {
|
||||
// take into account multiple channels per network
|
||||
err := s.StopAndRemoveNetwork(handlerKey{network.Server, network.NickServ.Account})
|
||||
err := s.StopAndRemoveNetwork(handlerKey{network.Server, network.Nick})
|
||||
if err != nil {
|
||||
s.log.Error().Stack().Err(err).Msgf("could not stop network: %+v", network.Name)
|
||||
return errors.New("could not stop network: %v", network.Name)
|
||||
|
|
|
@ -29,12 +29,19 @@ irc:
|
|||
announcers:
|
||||
- _AnnounceBot_
|
||||
settings:
|
||||
- name: nickserv.account
|
||||
- name: nick
|
||||
type: text
|
||||
required: true
|
||||
label: Nick
|
||||
help: Bot nick. Eg. user_bot
|
||||
|
||||
- name: auth.account
|
||||
type: text
|
||||
required: false
|
||||
label: NickServ Account
|
||||
help: NickServ account. Make sure to group your user and bot. Eg. user_bot
|
||||
- name: nickserv.password
|
||||
help: NickServ account. Make sure to group your user and bot.
|
||||
|
||||
- name: auth.password
|
||||
type: secret
|
||||
required: false
|
||||
label: NickServ Password
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import type { FieldProps } from "formik";
|
||||
import type { FieldProps, FieldValidator } from "formik";
|
||||
import { Field } from "formik";
|
||||
import { classNames } from "../../utils";
|
||||
import { useToggle } from "../../hooks/hooks";
|
||||
|
@ -14,6 +14,7 @@ interface TextFieldWideProps {
|
|||
defaultValue?: string;
|
||||
required?: boolean;
|
||||
hidden?: boolean;
|
||||
validate?: FieldValidator;
|
||||
}
|
||||
|
||||
export const TextFieldWide = ({
|
||||
|
@ -23,7 +24,8 @@ export const TextFieldWide = ({
|
|||
placeholder,
|
||||
defaultValue,
|
||||
required,
|
||||
hidden
|
||||
hidden,
|
||||
validate
|
||||
}: TextFieldWideProps) => (
|
||||
<div hidden={hidden} className="space-y-1 p-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4">
|
||||
<div>
|
||||
|
@ -36,6 +38,7 @@ export const TextFieldWide = ({
|
|||
name={name}
|
||||
value={defaultValue}
|
||||
required={required}
|
||||
validate={validate}
|
||||
>
|
||||
{({ field, meta }: FieldProps) => (
|
||||
<input
|
||||
|
@ -66,6 +69,7 @@ interface PasswordFieldWideProps {
|
|||
help?: string;
|
||||
required?: boolean;
|
||||
defaultVisible?: boolean;
|
||||
validate?: FieldValidator;
|
||||
}
|
||||
|
||||
export const PasswordFieldWide = ({
|
||||
|
@ -75,7 +79,8 @@ export const PasswordFieldWide = ({
|
|||
defaultValue,
|
||||
help,
|
||||
required,
|
||||
defaultVisible
|
||||
defaultVisible,
|
||||
validate
|
||||
}: PasswordFieldWideProps) => {
|
||||
const [isVisible, toggleVisibility] = useToggle(defaultVisible);
|
||||
|
||||
|
@ -90,6 +95,7 @@ export const PasswordFieldWide = ({
|
|||
<Field
|
||||
name={name}
|
||||
defaultValue={defaultValue}
|
||||
validate={validate}
|
||||
>
|
||||
{({ field, meta }: FieldProps) => (
|
||||
<div className="relative">
|
||||
|
|
|
@ -306,6 +306,21 @@ export const NotificationTypeOptions: OptionBasicTyped<NotificationType>[] = [
|
|||
}
|
||||
];
|
||||
|
||||
export const IrcAuthMechanismTypeOptions: OptionBasicTyped<IrcAuthMechanism>[] = [
|
||||
{
|
||||
label: "None",
|
||||
value: "NONE"
|
||||
},
|
||||
{
|
||||
label: "SASL (plain)",
|
||||
value: "SASL_PLAIN"
|
||||
},
|
||||
{
|
||||
label: "NickServ",
|
||||
value: "NICKSERV"
|
||||
}
|
||||
];
|
||||
|
||||
export const downloadsPerUnitOptions: OptionBasic[] = [
|
||||
{
|
||||
label: "Select",
|
||||
|
|
|
@ -2,7 +2,7 @@ import { Fragment, useState } from "react";
|
|||
import { toast } from "react-hot-toast";
|
||||
import { useMutation, useQuery } from "react-query";
|
||||
import Select, { components, ControlProps, InputProps, MenuProps, OptionProps } from "react-select";
|
||||
import type { FieldProps } from "formik";
|
||||
import type { FieldProps, FormikErrors } from "formik";
|
||||
import { Field, Form, Formik, FormikValues } from "formik";
|
||||
|
||||
import { XMarkIcon } from "@heroicons/react/24/solid";
|
||||
|
@ -16,46 +16,53 @@ import { PasswordFieldWide, SwitchGroupWide, TextFieldWide } from "../../compone
|
|||
import { SlideOver } from "../../components/panels";
|
||||
import Toast from "../../components/notifications/Toast";
|
||||
|
||||
const Input = (props: InputProps) => {
|
||||
return (
|
||||
<components.Input
|
||||
{...props}
|
||||
inputClassName="outline-none border-none shadow-none focus:ring-transparent"
|
||||
className="text-gray-400 dark:text-gray-100"
|
||||
children={props.children}
|
||||
/>
|
||||
);
|
||||
};
|
||||
const Input = (props: InputProps) => (
|
||||
<components.Input
|
||||
{...props}
|
||||
inputClassName="outline-none border-none shadow-none focus:ring-transparent"
|
||||
className="text-gray-400 dark:text-gray-100"
|
||||
children={props.children}
|
||||
/>
|
||||
);
|
||||
|
||||
const Control = (props: ControlProps) => {
|
||||
return (
|
||||
<components.Control
|
||||
{...props}
|
||||
className="block w-full dark:bg-gray-800 border border-gray-300 dark:border-gray-700 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 dark:text-gray-100 sm:text-sm"
|
||||
children={props.children}
|
||||
/>
|
||||
);
|
||||
};
|
||||
const Control = (props: ControlProps) => (
|
||||
<components.Control
|
||||
{...props}
|
||||
className="p-1 block w-full dark:bg-gray-800 border border-gray-300 dark:border-gray-700 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 dark:text-gray-100 sm:text-sm"
|
||||
children={props.children}
|
||||
/>
|
||||
);
|
||||
|
||||
const Menu = (props: MenuProps) => {
|
||||
return (
|
||||
<components.Menu
|
||||
{...props}
|
||||
className="dark:bg-gray-800 border border-gray-300 dark:border-gray-700 dark:text-gray-400 rounded-md shadow-sm"
|
||||
children={props.children}
|
||||
/>
|
||||
);
|
||||
};
|
||||
const Menu = (props: MenuProps) => (
|
||||
<components.Menu
|
||||
{...props}
|
||||
className="dark:bg-gray-800 border border-gray-300 dark:border-gray-700 dark:text-gray-400 rounded-md shadow-sm cursor-pointer"
|
||||
children={props.children}
|
||||
/>
|
||||
);
|
||||
|
||||
const Option = (props: OptionProps) => {
|
||||
return (
|
||||
<components.Option
|
||||
{...props}
|
||||
className="dark:text-gray-400 dark:bg-gray-800 dark:hover:bg-gray-900 dark:focus:bg-gray-900"
|
||||
children={props.children}
|
||||
/>
|
||||
);
|
||||
};
|
||||
const Option = (props: OptionProps) => (
|
||||
<components.Option
|
||||
{...props}
|
||||
className="dark:text-gray-400 dark:bg-gray-800 dark:hover:bg-gray-900 dark:focus:bg-gray-900 cursor-pointer"
|
||||
children={props.children}
|
||||
/>
|
||||
);
|
||||
|
||||
// const isRequired = (message: string) => (value?: string | undefined) => (!!value ? undefined : message);
|
||||
|
||||
function validateField(s: IndexerSetting) {
|
||||
return (value?: string | undefined) => {
|
||||
if (s.required) {
|
||||
if (s.default !== "") {
|
||||
if (value && s.default === value) {
|
||||
return "Default value, please edit";
|
||||
}
|
||||
}
|
||||
return !!value ? undefined : "Required";
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
const IrcSettingFields = (ind: IndexerDefinition, indexer: string) => {
|
||||
if (indexer !== "") {
|
||||
|
@ -66,18 +73,19 @@ const IrcSettingFields = (ind: IndexerDefinition, indexer: string) => {
|
|||
<div className="px-4 space-y-1">
|
||||
<Dialog.Title className="text-lg font-medium text-gray-900 dark:text-white">IRC</Dialog.Title>
|
||||
<p className="text-sm text-gray-500 dark:text-gray-200">
|
||||
Networks, channels and invite commands are configured automatically.
|
||||
Networks and channels are configured automatically in the background.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{ind.irc.settings.map((f: IndexerSetting, idx: number) => {
|
||||
switch (f.type) {
|
||||
case "text":
|
||||
return <TextFieldWide name={`irc.${f.name}`} label={f.label} required={f.required} key={idx} help={f.help} />;
|
||||
return <TextFieldWide name={`irc.${f.name}`} label={f.label} required={f.required} key={idx} help={f.help} validate={validateField(f)} />;
|
||||
case "secret":
|
||||
if (f.name === "invite_command") {
|
||||
return <PasswordFieldWide name={`irc.${f.name}`} label={f.label} required={f.required} key={idx} help={f.help} defaultVisible={true} defaultValue={f.default} />;
|
||||
return <PasswordFieldWide name={`irc.${f.name}`} label={f.label} required={f.required} key={idx} help={f.help} defaultVisible={true} defaultValue={f.default} validate={validateField(f)} />;
|
||||
}
|
||||
return <PasswordFieldWide name={`irc.${f.name}`} label={f.label} required={f.required} key={idx} help={f.help} defaultValue={f.default} />;
|
||||
return <PasswordFieldWide name={`irc.${f.name}`} label={f.label} required={f.required} key={idx} help={f.help} defaultValue={f.default} validate={validateField(f)} />;
|
||||
}
|
||||
return null;
|
||||
})}
|
||||
|
@ -101,14 +109,14 @@ const FeedSettingFields = (ind: IndexerDefinition, indexer: string) => {
|
|||
</p>
|
||||
</div>
|
||||
|
||||
<TextFieldWide name="name" label="Name" defaultValue={""} />
|
||||
<TextFieldWide name="name" label="Name" defaultValue="" />
|
||||
|
||||
{ind.torznab.settings.map((f: IndexerSetting, idx: number) => {
|
||||
switch (f.type) {
|
||||
case "text":
|
||||
return <TextFieldWide name={`feed.${f.name}`} label={f.label} required={f.required} key={idx} help={f.help} />;
|
||||
return <TextFieldWide name={`feed.${f.name}`} label={f.label} required={f.required} key={idx} help={f.help} validate={validateField(f)} />;
|
||||
case "secret":
|
||||
return <PasswordFieldWide name={`feed.${f.name}`} label={f.label} required={f.required} key={idx} help={f.help} defaultValue={f.default} />;
|
||||
return <PasswordFieldWide name={`feed.${f.name}`} label={f.label} required={f.required} key={idx} help={f.help} defaultValue={f.default} validate={validateField(f)} />;
|
||||
}
|
||||
return null;
|
||||
})}
|
||||
|
@ -132,14 +140,14 @@ const RSSFeedSettingFields = (ind: IndexerDefinition, indexer: string) => {
|
|||
</p>
|
||||
</div>
|
||||
|
||||
<TextFieldWide name="name" label="Name" defaultValue={""} />
|
||||
<TextFieldWide name="name" label="Name" defaultValue="" />
|
||||
|
||||
{ind.rss.settings.map((f: IndexerSetting, idx: number) => {
|
||||
switch (f.type) {
|
||||
case "text":
|
||||
return <TextFieldWide name={`feed.${f.name}`} label={f.label} required={f.required} key={idx} help={f.help} />;
|
||||
return <TextFieldWide name={`feed.${f.name}`} label={f.label} required={f.required} key={idx} help={f.help} validate={validateField(f)} />;
|
||||
case "secret":
|
||||
return <PasswordFieldWide name={`feed.${f.name}`} label={f.label} required={f.required} key={idx} help={f.help} defaultValue={f.default} />;
|
||||
return <PasswordFieldWide name={`feed.${f.name}`} label={f.label} required={f.required} key={idx} help={f.help} defaultValue={f.default} validate={validateField(f)} />;
|
||||
}
|
||||
return null;
|
||||
})}
|
||||
|
@ -158,11 +166,11 @@ const SettingFields = (ind: IndexerDefinition, indexer: string) => {
|
|||
switch (f.type) {
|
||||
case "text":
|
||||
return (
|
||||
<TextFieldWide name={`settings.${f.name}`} label={f.label} key={idx} help={f.help} defaultValue="" />
|
||||
<TextFieldWide name={`settings.${f.name}`} label={f.label} required={f.required} key={idx} help={f.help} validate={validateField(f)} />
|
||||
);
|
||||
case "secret":
|
||||
return (
|
||||
<PasswordFieldWide name={`settings.${f.name}`} label={f.label} key={idx} help={f.help} defaultValue="" />
|
||||
<PasswordFieldWide name={`settings.${f.name}`} label={f.label} required={f.required} key={idx} help={f.help} validate={validateField(f)} />
|
||||
);
|
||||
}
|
||||
return null;
|
||||
|
@ -184,24 +192,14 @@ function slugIdentifier(name: string, prefix?: string) {
|
|||
return slugify(l);
|
||||
}
|
||||
|
||||
// interface initialValues {
|
||||
// enabled: boolean;
|
||||
// identifier: string;
|
||||
// implementation: string;
|
||||
// name: string;
|
||||
// irc?: Record<string, unknown>;
|
||||
// feed?: Record<string, unknown>;
|
||||
// settings?: Record<string, unknown>;
|
||||
// }
|
||||
|
||||
type SelectValue = {
|
||||
label: string;
|
||||
value: string;
|
||||
};
|
||||
|
||||
interface AddProps {
|
||||
isOpen: boolean;
|
||||
toggle: () => void;
|
||||
isOpen: boolean;
|
||||
toggle: () => void;
|
||||
}
|
||||
|
||||
export function IndexerAddForm({ isOpen, toggle }: AddProps) {
|
||||
|
@ -238,6 +236,7 @@ export function IndexerAddForm({ isOpen, toggle }: AddProps) {
|
|||
);
|
||||
|
||||
const onSubmit = (formData: FormikValues) => {
|
||||
console.log("form: ", formData);
|
||||
const ind = data && data.find(i => i.identifier === formData.identifier);
|
||||
if (!ind)
|
||||
return;
|
||||
|
@ -319,11 +318,22 @@ export function IndexerAddForm({ isOpen, toggle }: AddProps) {
|
|||
server: ind.irc.server,
|
||||
port: ind.irc.port,
|
||||
tls: ind.irc.tls,
|
||||
nickserv: formData.irc.nickserv,
|
||||
nick: formData.irc.nick,
|
||||
auth: {
|
||||
mechanism: "NONE"
|
||||
// account: formData.irc.auth.account,
|
||||
// password: formData.irc.auth.password
|
||||
},
|
||||
invite_command: formData.irc.invite_command,
|
||||
channels: channels
|
||||
};
|
||||
|
||||
if (formData.irc.auth.account !== "" && formData.irc.auth.password !== "") {
|
||||
network.auth.mechanism = "SASL_PLAIN";
|
||||
network.auth.account = formData.irc.auth.account;
|
||||
network.auth.password = formData.irc.auth.password;
|
||||
}
|
||||
|
||||
mutation.mutate(formData as Indexer, {
|
||||
onSuccess: () => {
|
||||
ircMutation.mutate(network);
|
||||
|
@ -356,9 +366,7 @@ export function IndexerAddForm({ isOpen, toggle }: AddProps) {
|
|||
identifier: "",
|
||||
implementation: "irc",
|
||||
name: "",
|
||||
irc: {
|
||||
invite_command: ""
|
||||
},
|
||||
irc: {},
|
||||
settings: {}
|
||||
}}
|
||||
onSubmit={onSubmit}
|
||||
|
@ -369,11 +377,11 @@ export function IndexerAddForm({ isOpen, toggle }: AddProps) {
|
|||
<div className="px-4 py-6 bg-gray-50 dark:bg-gray-900 sm:px-6">
|
||||
<div className="flex items-start justify-between space-x-3">
|
||||
<div className="space-y-1">
|
||||
<Dialog.Title
|
||||
className="text-lg font-medium text-gray-900 dark:text-white">Add
|
||||
indexer</Dialog.Title>
|
||||
<Dialog.Title className="text-lg font-medium text-gray-900 dark:text-white">
|
||||
Add indexer
|
||||
</Dialog.Title>
|
||||
<p className="text-sm text-gray-500 dark:text-gray-200">
|
||||
Add indexer.
|
||||
Add indexer.
|
||||
</p>
|
||||
</div>
|
||||
<div className="h-7 flex items-center">
|
||||
|
@ -425,19 +433,21 @@ export function IndexerAddForm({ isOpen, toggle }: AddProps) {
|
|||
onChange={(option: unknown) => {
|
||||
resetForm();
|
||||
|
||||
const opt = option as SelectValue;
|
||||
setFieldValue("name", opt.label ?? "");
|
||||
setFieldValue(field.name, opt.value ?? "");
|
||||
if (option != null) {
|
||||
const opt = option as SelectValue;
|
||||
setFieldValue("name", opt.label ?? "");
|
||||
setFieldValue(field.name, opt.value ?? "");
|
||||
|
||||
const ind = data && data.find(i => i.identifier === opt.value);
|
||||
if (ind) {
|
||||
setIndexer(ind);
|
||||
setFieldValue("implementation", ind.implementation);
|
||||
const ind = data && data.find(i => i.identifier === opt.value);
|
||||
if (ind) {
|
||||
setIndexer(ind);
|
||||
setFieldValue("implementation", ind.implementation);
|
||||
|
||||
if (ind.irc && ind.irc.settings) {
|
||||
ind.irc.settings.forEach((s) => {
|
||||
setFieldValue(`irc.${s.name}`, s.default ?? "");
|
||||
});
|
||||
if (ind.irc && ind.irc.settings) {
|
||||
ind.irc.settings.forEach((s) => {
|
||||
setFieldValue(`irc.${s.name}`, s.default ?? "");
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}}
|
||||
|
@ -471,13 +481,13 @@ export function IndexerAddForm({ isOpen, toggle }: AddProps) {
|
|||
className="bg-white dark:bg-gray-700 py-2 px-4 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm text-sm font-medium text-gray-700 dark:text-gray-200 hover:bg-gray-50 dark:hover:bg-gray-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 dark:focus:ring-blue-500"
|
||||
onClick={toggle}
|
||||
>
|
||||
Cancel
|
||||
Cancel
|
||||
</button>
|
||||
<button
|
||||
type="submit"
|
||||
className="inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-blue-600 dark:bg-blue-600 hover:bg-blue-700 dark:hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 dark:focus:ring-blue-500"
|
||||
>
|
||||
Save
|
||||
Save
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -517,6 +527,8 @@ export function IndexerUpdateForm({ isOpen, toggle, indexer }: UpdateProps) {
|
|||
onSuccess: () => {
|
||||
queryClient.invalidateQueries(["indexer"]);
|
||||
toast.custom((t) => <Toast type="success" body={`${indexer.name} was deleted.`} t={t} />);
|
||||
|
||||
toggle();
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -87,7 +87,8 @@ interface IrcNetworkAddFormValues {
|
|||
port: number;
|
||||
tls: boolean;
|
||||
pass: string;
|
||||
nickserv: NickServ;
|
||||
nick: string;
|
||||
auth: IrcAuth;
|
||||
channels: IrcChannel[];
|
||||
}
|
||||
|
||||
|
@ -114,6 +115,7 @@ export function IrcNetworkAddForm({ isOpen, toggle }: AddFormProps) {
|
|||
const onSubmit = (data: unknown) => {
|
||||
mutation.mutate(data as IrcNetwork);
|
||||
};
|
||||
|
||||
const validate = (values: FormikValues) => {
|
||||
const errors = {} as FormikErrors<FormikValues>;
|
||||
if (!values.name)
|
||||
|
@ -125,8 +127,11 @@ export function IrcNetworkAddForm({ isOpen, toggle }: AddFormProps) {
|
|||
if (!values.server)
|
||||
errors.server = "Required";
|
||||
|
||||
if (!values.nickserv || !values.nickserv.account)
|
||||
errors.nickserv = { account: "Required" };
|
||||
if (!values.nick)
|
||||
errors.nick = "Required";
|
||||
|
||||
// if (!values.auth || !values.auth.account)
|
||||
// errors.auth = { account: "Required" };
|
||||
|
||||
return errors;
|
||||
};
|
||||
|
@ -138,7 +143,9 @@ export function IrcNetworkAddForm({ isOpen, toggle }: AddFormProps) {
|
|||
port: 6667,
|
||||
tls: false,
|
||||
pass: "",
|
||||
nickserv: {
|
||||
nick: "",
|
||||
auth: {
|
||||
mechanism: "SASL_PLAIN",
|
||||
account: ""
|
||||
},
|
||||
channels: []
|
||||
|
@ -185,14 +192,20 @@ export function IrcNetworkAddForm({ isOpen, toggle }: AddFormProps) {
|
|||
help="Network password"
|
||||
/>
|
||||
<TextFieldWide
|
||||
name="nickserv.account"
|
||||
label="NickServ Account"
|
||||
placeholder="NickServ Account"
|
||||
name="nick"
|
||||
label="Nick"
|
||||
placeholder="bot nick"
|
||||
required={true}
|
||||
/>
|
||||
<TextFieldWide
|
||||
name="auth.account"
|
||||
label="Auth Account"
|
||||
placeholder="Auth Account"
|
||||
required={true}
|
||||
/>
|
||||
<PasswordFieldWide
|
||||
name="nickserv.password"
|
||||
label="NickServ Password"
|
||||
name="auth.password"
|
||||
label="Auth Password"
|
||||
/>
|
||||
<PasswordFieldWide name="invite_command" label="Invite command" />
|
||||
|
||||
|
@ -210,8 +223,9 @@ interface IrcNetworkUpdateFormValues {
|
|||
server: string;
|
||||
port: number;
|
||||
tls: boolean;
|
||||
nickserv?: NickServ;
|
||||
pass: string;
|
||||
nick: string;
|
||||
auth?: IrcAuth;
|
||||
invite_command: string;
|
||||
channels: Array<IrcChannel>;
|
||||
}
|
||||
|
@ -245,6 +259,7 @@ export function IrcNetworkUpdateForm({
|
|||
});
|
||||
|
||||
const onSubmit = (data: unknown) => {
|
||||
console.log("submit: ", data);
|
||||
mutation.mutate(data as IrcNetwork);
|
||||
};
|
||||
|
||||
|
@ -263,10 +278,8 @@ export function IrcNetworkUpdateForm({
|
|||
errors.port = "Required";
|
||||
}
|
||||
|
||||
if (!values.nickserv?.account) {
|
||||
errors.nickserv = {
|
||||
account: "Required"
|
||||
};
|
||||
if (!values.nick) {
|
||||
errors.nick = "Required";
|
||||
}
|
||||
|
||||
return errors;
|
||||
|
@ -283,10 +296,11 @@ export function IrcNetworkUpdateForm({
|
|||
server: network.server,
|
||||
port: network.port,
|
||||
tls: network.tls,
|
||||
nickserv: network.nickserv,
|
||||
nick: network.nick,
|
||||
pass: network.pass,
|
||||
channels: network.channels,
|
||||
invite_command: network.invite_command
|
||||
auth: network.auth,
|
||||
invite_command: network.invite_command,
|
||||
channels: network.channels
|
||||
};
|
||||
|
||||
return (
|
||||
|
@ -328,19 +342,44 @@ export function IrcNetworkUpdateForm({
|
|||
<PasswordFieldWide
|
||||
name="pass"
|
||||
label="Password"
|
||||
help="Network password"
|
||||
help="Network password, not commonly used."
|
||||
/>
|
||||
|
||||
<TextFieldWide
|
||||
name="nickserv.account"
|
||||
label="NickServ Account"
|
||||
placeholder="NickServ Account"
|
||||
name="nick"
|
||||
label="Nick"
|
||||
placeholder="nick"
|
||||
required={true}
|
||||
/>
|
||||
<PasswordFieldWide
|
||||
name="nickserv.password"
|
||||
label="NickServ Password"
|
||||
/>
|
||||
|
||||
<div className="border-t border-gray-200 dark:border-gray-700 py-5">
|
||||
<div className="px-4 space-y-1 mb-8">
|
||||
<Dialog.Title className="text-lg font-medium text-gray-900 dark:text-white">Identification</Dialog.Title>
|
||||
<p className="text-sm text-gray-500 dark:text-gray-400">
|
||||
Identify with SASL or NickServ. Most networks support SASL but some don't.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<SelectField<IrcAuthMechanism>
|
||||
name="auth.mechanism"
|
||||
label="Mechanism"
|
||||
options={IrcAuthMechanismTypeOptions}
|
||||
/>
|
||||
|
||||
<TextFieldWide
|
||||
name="auth.account"
|
||||
label="Account"
|
||||
placeholder="Auth Account"
|
||||
help="NickServ / SASL account. For grouped nicks try the main."
|
||||
/>
|
||||
|
||||
<PasswordFieldWide
|
||||
name="auth.password"
|
||||
label="Password"
|
||||
help="NickServ / SASL password."
|
||||
/>
|
||||
|
||||
</div>
|
||||
|
||||
<PasswordFieldWide name="invite_command" label="Invite command" />
|
||||
|
||||
|
@ -349,4 +388,118 @@ export function IrcNetworkUpdateForm({
|
|||
)}
|
||||
</SlideOver>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
interface SelectFieldProps<T> {
|
||||
name: string;
|
||||
label: string;
|
||||
options: OptionBasicTyped<T>[]
|
||||
}
|
||||
|
||||
function SelectField<T>({ name, label, options }: SelectFieldProps<T>) {
|
||||
return (
|
||||
<div className="flex items-center justify-between space-y-1 px-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4">
|
||||
<div>
|
||||
<label
|
||||
htmlFor={name}
|
||||
className="block text-sm font-medium text-gray-900 dark:text-white"
|
||||
>
|
||||
{label}
|
||||
</label>
|
||||
</div>
|
||||
<div className="sm:col-span-2">
|
||||
<Field name={name} type="select">
|
||||
{({
|
||||
field,
|
||||
form: { setFieldValue, resetForm }
|
||||
}: FieldProps) => (
|
||||
<Select
|
||||
{...field}
|
||||
id={name}
|
||||
isClearable={true}
|
||||
isSearchable={true}
|
||||
components={{
|
||||
Input,
|
||||
Control,
|
||||
Menu,
|
||||
Option
|
||||
}}
|
||||
placeholder="Choose a type"
|
||||
styles={{
|
||||
singleValue: (base) => ({
|
||||
...base,
|
||||
color: "unset"
|
||||
})
|
||||
}}
|
||||
theme={(theme) => ({
|
||||
...theme,
|
||||
spacing: {
|
||||
...theme.spacing,
|
||||
controlHeight: 30,
|
||||
baseUnit: 2
|
||||
}
|
||||
})}
|
||||
value={field?.value && options.find(o => o.value == field?.value)}
|
||||
onChange={(option) => {
|
||||
resetForm();
|
||||
|
||||
// const opt = option as SelectOption;
|
||||
// setFieldValue("name", option?.label ?? "")
|
||||
setFieldValue(
|
||||
field.name,
|
||||
option.value ?? ""
|
||||
);
|
||||
}}
|
||||
options={options}
|
||||
/>
|
||||
)}
|
||||
</Field>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
import Select, { components, ControlProps, InputProps, MenuProps, OptionProps } from "react-select";
|
||||
import { IrcAuthMechanismTypeOptions, OptionBasicTyped } from "../../domain/constants";
|
||||
import { Dialog } from "@headlessui/react";
|
||||
|
||||
const Input = (props: InputProps) => {
|
||||
return (
|
||||
<components.Input
|
||||
{...props}
|
||||
inputClassName="outline-none border-none shadow-none focus:ring-transparent"
|
||||
className="text-gray-400 dark:text-gray-100"
|
||||
children={props.children}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
const Control = (props: ControlProps) => {
|
||||
return (
|
||||
<components.Control
|
||||
{...props}
|
||||
className="p-1 block w-full dark:bg-gray-800 border border-gray-300 dark:border-gray-700 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 dark:text-gray-100 sm:text-sm"
|
||||
children={props.children}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
const Menu = (props: MenuProps) => {
|
||||
return (
|
||||
<components.Menu
|
||||
{...props}
|
||||
className="dark:bg-gray-800 border border-gray-300 dark:border-gray-700 dark:text-gray-400 rounded-md shadow-sm"
|
||||
children={props.children}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
const Option = (props: OptionProps) => {
|
||||
return (
|
||||
<components.Option
|
||||
{...props}
|
||||
className="dark:text-gray-400 dark:bg-gray-800 dark:hover:bg-gray-900 dark:focus:bg-gray-900"
|
||||
children={props.children}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -208,18 +208,14 @@ const ListItem = ({ idx, network, expanded }: ListItemProps) => {
|
|||
</p>
|
||||
</div>
|
||||
</div>
|
||||
{network.nickserv && network.nickserv.account ? (
|
||||
<div
|
||||
className="hidden sm:flex col-span-3 items-center sm:px-6 text-sm text-gray-500 dark:text-gray-400 cursor-pointer"
|
||||
onClick={toggleEdit}
|
||||
>
|
||||
<div className="overflow-x-auto flex">
|
||||
{network.nickserv.account}
|
||||
</div>
|
||||
<div
|
||||
className="hidden sm:flex col-span-3 items-center sm:px-6 text-sm text-gray-500 dark:text-gray-400 cursor-pointer"
|
||||
onClick={toggleEdit}
|
||||
>
|
||||
<div className="overflow-x-auto flex">
|
||||
{network.nick}
|
||||
</div>
|
||||
) : (
|
||||
<div className="col-span-3" />
|
||||
)}
|
||||
</div>
|
||||
<div className="col-span-1 text-sm text-gray-500 dark:text-gray-400">
|
||||
<ListItemDropdown network={network} toggleUpdate={toggleUpdate} />
|
||||
</div>
|
||||
|
@ -311,6 +307,8 @@ const ListItemDropdown = ({
|
|||
queryClient.invalidateQueries(["networks", network.id]);
|
||||
|
||||
toast.custom((t) => <Toast type="success" body={`Network ${network.name} was deleted`} t={t}/>);
|
||||
|
||||
toggleDeleteModal();
|
||||
}
|
||||
}
|
||||
);
|
||||
|
|
14
web/src/types/Irc.d.ts
vendored
14
web/src/types/Irc.d.ts
vendored
|
@ -5,9 +5,10 @@ interface IrcNetwork {
|
|||
server: string;
|
||||
port: number;
|
||||
tls: boolean;
|
||||
nick: string;
|
||||
pass: string;
|
||||
auth: IrcAuth; // optional
|
||||
invite_command: string;
|
||||
nickserv?: NickServ; // optional
|
||||
channels: IrcChannel[];
|
||||
connected: boolean;
|
||||
connected_since: string;
|
||||
|
@ -20,8 +21,9 @@ interface IrcNetworkCreate {
|
|||
port: number;
|
||||
tls: boolean;
|
||||
pass: string;
|
||||
nick: string;
|
||||
auth: IrcAuth; // optional
|
||||
invite_command: string;
|
||||
nickserv?: NickServ; // optional
|
||||
channels: IrcChannel[];
|
||||
connected: boolean;
|
||||
}
|
||||
|
@ -48,8 +50,9 @@ interface IrcNetworkWithHealth {
|
|||
port: number;
|
||||
tls: boolean;
|
||||
pass: string;
|
||||
nick: string;
|
||||
auth: IrcAuth; // optional
|
||||
invite_command: string;
|
||||
nickserv?: NickServ; // optional
|
||||
channels: IrcChannelWithHealth[];
|
||||
connected: boolean;
|
||||
connected_since: string;
|
||||
|
@ -57,7 +60,10 @@ interface IrcNetworkWithHealth {
|
|||
healthy: boolean;
|
||||
}
|
||||
|
||||
interface NickServ {
|
||||
type IrcAuthMechanism = "NONE" | "SASL_PLAIN" | "NICKSERV";
|
||||
|
||||
interface IrcAuth {
|
||||
mechanism: IrcAuthMechanism; // optional
|
||||
account?: string; // optional
|
||||
password?: string; // optional
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue