语言
Anvil · Discord阅读约 7 分钟

Discord 里的 Anvil

一个机器人,一次邀请,不用注册任何应用。这里讲它发什么、发到哪里、能在你的服务器里改动什么——以及它哪天不动了,你该看哪里。

一个机器人 共享,无需创建约 5 分钟 从邀请到第一条帖子按需开启 每个信息流在你指定去处前都是关的
这份简体中文译文还没有母语者校对过。如果某句话读起来不对,英文页面 才是原文 —— 而告诉我们才能让它被修正。
步骤 1

一个机器人,已经建好

#

没有 Discord 应用要创建,没有令牌要生成,也没有密钥要粘贴。Anvil 运行一个所有氏族共用的机器人,所以接入就是一次邀请,仅此而已。

你仍然可以自带——在 Use your own bot instead (advanced) 下粘贴一个令牌,就会改用它。只有当你希望机器人在成员列表里显示你氏族的名字和头像时才值得;本指南里的一切在两种情况下表现完全相同。

查看频道、发送消息、嵌入链接、附加文件基础项。没有这些,它就在你的服务器里默不作声。
管理 Webhook好让 Set it up for me 和 Post here 替你创建 Webhook,而不必你手动从 Discord 复制网址;Anvil 也靠它找出旧的 Webhook 供你删除。
管理身份组仅当你开启身份组同步时需要。届时它可以分发你映射的身份组——而且永远无法碰高于自己的身份组,这是 Discord 的规则,不是我们的。
管理昵称仅当你开启昵称同步时需要,好把成员的服务器昵称设为其游戏昵称。
管理频道用于选秀期间各队的私密频道,以及以新分类或论坛形式发布的攻略。不给也不影响其他功能。
管理子区、在子区中发送消息用于发布到论坛的攻略:在帖子里写内容,以及再次删除帖子——没有这个权限,Discord 连机器人自己的论坛帖子都不让它删。
更改昵称仅当你在 Connection → Bot appearance in your server 中让机器人使用你们氏族的名字时需要。只会改变机器人在你们服务器里的名字。
它会一次性请求全部权限
Discord 没有办法事后再申请某项权限,所以邀请链接会一次请求整套,而你从不开启的功能也就从不使用它们的权限。重新打开邀请链接,也是修复被人移除的权限的方法。
步骤 2

接入它

#

两件事,按这个顺序。机器人必须在你的服务器里,而 Anvil 必须知道哪个服务器是你的。

邀请机器人管理 → Discord → Connect your Discord server(或 Add Anvil to Discord)。Discord 会问你要把 Anvil 加到哪个服务器,然后把你送回这里,所以你不会误加到别的服务器。之后,Invite / re-invite the bot 在 More settings → Connection 下。
填入服务器 ID仅当按钮办不到时:展开 Can’t use the button? Enter the server ID,在 Discord 里右键你的服务器图标 → 复制服务器 ID(需要在 Discord 自身的“高级设置”里打开“开发者模式”),粘贴到 Your Discord server’s ID,然后按 Save。正是这个字段让连接专属于你。

随后面板告诉你的是事实而不是你的意图:机器人是否真的是那个服务器的成员,以及它缺少哪些权限。那里的一行绿字,比一份保存好的表单更有价值。

服务器 ID 就是全部绑定
在 Anvil 上一个服务器恰好属于一个氏族,来自无人认领的服务器的斜杠命令会被拒绝,而不是靠猜。在你填好之前,机器人只是被邀请了,闲着。
步骤 3

设置 Webhook

#

Anvil 通过 Webhook 发帖,每个频道一个,而且全都是可选的。在你把某个信息流指向某个频道之前,什么都不会发到任何地方——崭新的氏族是刻意安静,不是出了差错。

Anvil 机器人在你的服务器里时,Admin → Discord 顶部的 Set it up for me 会建好频道,并把每个信息流都指向它们。想手动设置,就打开 More settings → What goes where,先设 Clan & events 上的 Catch-all channel,再设 In-game (plugin) 上的 In-game catch-all:从下拉菜单里选一个频道,就会自动保存。没有机器人时,在 Discord 中打开该频道的 编辑频道 → 整合 → Webhook,创建一个,复制网址,在下拉菜单里选 Paste a webhook…,粘贴后按 Save。Webhook 网址可以向频道发帖,所以要像密码一样保管;如果泄露,请在 Discord 中删除并新建。Test,以及用来在两个 Webhook 之间轮换繁忙帖子的 Add another,都在 Post without a bot 下。

总频道主频道,位于 Clan & events 标签页。活动开始与结束、报名开放、排名、每周结果,凡是网站发布且没有专属频道的内容都在这里。只设置这一个,你的团队就能正常运作。
游戏内总频道位于 In-game (plugin) 标签页:游戏内内容若没有专属频道,就发到这里。第二个设置这个。
里程碑等位于 In-game (plugin) 标签页。玩家开启后,Slayer、clues、速通、击杀数、BA gambles 和自定义聊天消息会发到这里。其 Filters 按钮设置你的团队默认给成员哪些内容。玩家自己的模板和私密类型见 Settings, page by page。
拆分的推送源活动帖子、你共同主办的 boards、Skill & boss of the week 和团队日历活动可以从总频道拆分出来;稀有掉落、宠物、collection log、等级、combat achievements、任务、日记、死亡和 PvP 击杀可以从游戏内总频道拆分出来。成员变动、报名审批和团队金库账本位于 Staff only。留空的拆分推送源会回落到其总频道。金库是例外:留空意味着不发布任何金额。Leagues 及其他模式有各自的 Game modes 标签页。
先把死亡拆出去
在大多数板上,死亡是量最大的信息流,也是会把其他一切埋掉的那个。如果你只拆一样,就拆它。
步骤 4

Leagues、Deadman 及其他模式

#

Leagues、Deadman、hardcore 及其他模式运行在各自的世界中,使用各自的角色。它们的帖子始终带有标识,且从不计入排行榜或比赛。它们有自己的标签页:Admin → Discord → What goes where → Game modes。成员首次游玩某模式后,该模式会出现在那里。

每个模式都有一个开关和一个 To 频道。开启 Send game-mode posts to their own channels 即可使用这些频道;关闭则所有模式都发到普通频道,但仍带有标识。模式行上的 Posts 按钮会列出它发送的每种类型(常规类型以及该模式自己的活动),每种都有自己的开关。

在该列表下方,Custom thresholds 可让某模式发布的内容少于主游戏。Post drops rarer than 1 in…(至少 2)和 Post drops worth at least (gp)(至少 1,000)设定各自的下限(留空 = 与主游戏相同),然后按 Save drop thresholds:总是发布的物品仍会发布,但只因价值而计入的掉落则不会。Use its own level milestones 仅当升级同时符合两套规则时才发布。

只会更严,不会更松
模式的过滤器只能减少帖子。插件已经应用了你的主游戏设置,所以模式过滤器无论怎么设,都不能把一条帖子找回来。
步骤 5

来自其他插件或机器人的旧 Webhook

#

机器人在你的服务器里时,Discord 页面会列出服务器里所有不属于 Anvil 的 Webhook。Coming from other plugins? 提供 Use the same channels,这样 Set it up for me 会发到你旧信息流原来发的地方,你的成员那边什么都不用变。

等你的成员都用上 Anvil 之后,前往 Remove old webhooks from other plugins,勾选要删掉的那些,按 Remove … webhooks,再按 Yes, remove them。这会在 Discord 里把它们永久删除——无法撤销。

这个列表包含任何不属于 Anvil 的 Webhook,而不只是其他插件的。有想保留的,比如另一个机器人的信息流?按 Keep,它就离开列表;Show kept 和 Put back 可以把它找回来。保留只是在这里隐藏它——Discord 里什么都不会变。

需要“管理 Webhook”权限
机器人要读取你服务器的 Webhook 才能找到它们。如果它的身份组没有 管理 Webhook 权限,页面会提示它看不到这些 Webhook。
步骤 6

身份组与昵称

#

两种同步默认关闭,需要在 Admin → Discord → Roles & nicknames 中启用,而且两者都以成员名单为依据。打开 Enable Discord role sync,保持 Auto-match in-game rank → Discord role by name 开启,按需选择通用的 Member roles 和 Guest roles,保存后按 Sync roles & nicknames now。每个人还必须关联一个 Discord 身份;同步报告会列出它无法识别的人。

身份组同步要自动匹配等级,Discord 身份组的名称必须与游戏内的氏族等级一致:Owner、Deputy Owner、Coordinator、Overseer、General、Captain、Lieutenant、Sergeant、Corporal 或 Recruit。自定义等级只要其 Discord 身份组使用同一名称,也同样适用。匹配不区分大小写,下划线视同空格,但多余的单词不会匹配:General 可以;OSRS General 不行。成员和访客身份组是另外选的,所以名称可以任意。
昵称同步把成员的服务器昵称设为其游戏昵称。默认只填补空白昵称,也可以让它覆盖别人自己取的昵称——这是那种要事先想清楚、而不是事后再想的设置。
机器人的身份组必须高于它所管理的身份组
Discord 不允许任何机器人碰与自己同级或更高的身份组,而且从你这边看它是悄无声息地拒绝——同步就是什么也不做。在 服务器设置 → 身份组 里把 Anvil 的身份组往上拖,它就开始工作了;不需要重新邀请任何东西。
步骤 7

斜杠命令

#

机器人在你的服务器里响应 /bingo(棋盘、排名、规则、你自己的卡片),以及 /sotw、/stats、/coffer 等氏族命令。它们读取网站上的实时数据,所以没人需要离开 Discord 就能看到自己的位置。每条命令及其选项都有专门的页面。

机器人加入后大约一分钟它们才会出现。如果始终不出现,说明那次邀请授予了机器人却没有授予它的命令——这是两项独立权限,而较早的邀请链接只申请了其中一项。在 Discord 页面的 Connection 下重新运行 Invite / re-invite the bot 即可;这不会踢出机器人,也不会重置任何东西。

它用每个人自己的语言回复
默认情况下,机器人会用该成员 Discord 所设的语言回复,并以英语兜底。在 机器人语言 下选定一种语言,即可为所有人覆盖这一行为——这也是获得阿拉伯语的唯一途径,因为 Discord 没有阿拉伯语客户端语言可供检测。
步骤 8

它发什么,什么时候发

#

两个来源。当某处看起来不对时,值得分清哪个是哪个。

站点 发布活动:板开放、报名、开赛、排名、结果。它们从 Anvil 自身发出,无论有没有人装插件都照常工作。

插件 发布游戏里发生的事:掉落、宠物、死亡、等级、收集日志格、战斗成就。它们只对运行插件的成员存在,所以掉落频道安静,通常意味着插件安静,而不是 Webhook 坏了。

不会重复发两次
一次完成格子的掉落只会发一条,而不是插件发一条、板再发一条。
步骤 9

掉落阈值

#

Anvil 默认为 1m gp 或 1 in 1,000。掉落满足其中任一条件即发布。任何人都不能将数值设得低于这些,设为 0 则关闭该项。

在 Admin → Discord → What goes where → Drops 下设置团队默认值:Default minimum drop value (gp)、Default: post drops rarer than 1 in… 和 Require both。开启 Require both 后,掉落必须同时满足价值and稀有度。

每个角色都遵循其所属团队的默认值,若无团队则遵循 Anvil 的默认值。玩家可以在 Settings 中自行设置数值。页面显示 Using clan default 或 Custom,Reset 可恢复默认。

Hard floor: never post drops more common than 1 in… 是严格的限制。成员在你团队的频道中不能设得比它更宽松。他们自己的 webhook 则不受此限。

玩家端的更多内容
玩家自己的数值、模板和 webhook 见 Settings, page by page。
步骤 10

为繁忙频道添加更多 webhook

#

单个 webhook 的发送速度有限。对于繁忙的活动,请为同一频道添加更多 webhook。按 Busy channel? Let the bot add … more webhooks(需要 Manage Webhooks 权限),或将多个 webhook 链接粘贴到频道的输入框中。当你有 50 名或以上玩家、每分钟大量发帖,或 Discord 最近提示过 “slow down” 时,Anvil 会建议你添加更多。最多 10 个就足够了。

Anvil 会在它们之间轮流发送。如果 Discord 对某个 webhook 提示 “slow down”,该 webhook 会暂停片刻,由下一个接手发帖。如果某个 webhook 被删除或失效,它会被跳过 10 分钟。只要有一个 webhook 可用,帖子就会持续发出。

所有 webhook 都必须指向同一频道。如果不是,Anvil 会警告你。使用 Test 检测某个 webhook,或使用 Stop posting here 将其移除。

同一频道,同样的帖子
更多 webhook 绝不会重复发帖,它们只是分担工作。相同理念见上方的 掉落阈值,管理员端见 Running the event。
步骤 11

发布到 Discord

#

管理员可以在管理菜单 Clan 下的 Post to Discord 以机器人身份发帖。选一个 Channel,写好 Message,然后按 Send message。较长的文本,比如一本规则手册,会自动拆成几条消息。

Send as an embed 默认开启,并增加可选的 Title 和 Accent colour;关掉它就发纯文本。Ping 用来选择要提及的身份组或 @everyone,Anvil 会在发送前先问你一下。

你发出的每条帖子都会列在 Sent from here 下。Edit 会在 Discord 里修改它而不再次提及任何人,Delete 会把它删掉。

仅限管理员,需要机器人
它以 Anvil 机器人的身份发帖,所以请先连接你的服务器。版主看不到它。它就是 Clan settings → Features 下的 Post to Discord 开关;关掉后,它会从菜单中消失。
步骤 12

当它安静下来

#

按顺序来,因为每一条都排除下一条:

机器人真的在服务器里吗?Discord 页面上的 Connection 会直接告诉你。“令牌有效”和“在你的服务器里”是两回事,前者并不蕴含后者——用共享机器人时,令牌永远有效。
服务器 ID 对吗?一个错误但真实存在的 ID,看起来和正确的一模一样,直到你发现帖子发去了别处。
Webhook 还在吗?删除 Discord 频道会连同它的 Webhook 一起删掉,而 Anvil 会留着那个失效网址。到 What goes where 下重新为它选一个频道。
机器人的身份组够高吗?只影响身份组和昵称同步——见上文。这一条是会悄无声息失败的那个。
它无法欢迎新加入的人
Discord 只通过 gateway 连接上报加入事件,而共享机器人不会为每个服务器都保持这种连接。因此没有“欢迎”帖——把报名链接放进 #身份组 或 #从这里开始 频道即可,反正大家本来就看那里。

这里的一切都在 管理 → Discord 上:顶部是快速设置,下面是 More settings——Connection、What goes where、Event posts、Roles & nicknames、Team channels、Commands 和 Post without a bot。

卡住了,或者有什么不对? 在 Anvil 支持 Discord 中提问