tkhamez / neucore-discord-plugin
4.0.0
2023-08-04 15:31 UTC
Requires
- php: ^8.0.2
- ext-json: *
- ext-mbstring: *
- ext-pdo: *
- tkhamez/neucore-plugin: ^3.0
Requires (Dev)
- phpunit/phpunit: ^9.5
README
需要 Neucore 版本 2.2.0 或更高版本。
一个用于 EVE Online 的 Discord 机器人,可以添加和移除服务器成员,管理成员角色、频道成员和设置昵称。
这是一个 服务插件,适用于 Neucore。它也可以作为其他项目的库使用:composer require tkhamez/neucore-discord-plugin
。
详细功能
- 通过 OAuth 将新成员添加到 Discord 服务器。
- 可选的 Neucore 群组配置,这些群组是添加到服务器所必需的。如果成员丢失这些群组,他们将被踢出(如果启用了踢出功能)。
- 根据 Neucore 群组添加或删除的 Discord 角色。任何不在该配置中的角色永远不会添加或删除到任何成员。
- 可以根据 Neucore 群组直接添加或删除成员的配置频道。这仅适用于每个频道少于 100 名成员的情况!
- 默认情况下,机器人将成员的昵称更改为
EVE Character Name [Corporation Ticker]
。如果指定了“昵称”配置的模式,则它必须包含{characterName}
。其他可用的占位符是{corporationTicker}
和{allianceTicker}
。昵称的最大长度为 32 个字符。 - 可以选择禁用特定角色的昵称更改。
- 插件还会更新 Neucore 中显示的 Discord 用户名和编号。
- 可以配置一个 Discord 用户列表,这些用户永远不会被踢出,即使他们没有 Neucore 账户。
- 可以为不同的 Discord 服务器添加多个服务配置到 Neucore。
备注
- 在邀请过程中创建的用户令牌不会存储,可以安全地撤销它,或在 Discord 中“取消授权”应用程序。
- Discord 用户绑定到 Neucore 玩家账户。昵称设置为主要角色的名称。
- 如果主要角色发生变化,昵称将更新。
- 机器人无法更改服务器所有者的昵称。
- 如果从账户中删除了主要角色,昵称将更改为新主要角色的名称。
- 如果从 Neucore 玩家账户中删除了所有角色,成员将被踢出 Discord 服务器。
- 如果以其他方式将成员添加到 Discord 服务器,并且他们已经与 Neucore 服务账户相关联,则该账户状态将更改为活动状态,然后正常更新(这可能意味着成员将被再次踢出)。如果没有关联的 Neucore 服务账户,并且启用了踢出功能,则用户将被踢出。
- 如果禁用了踢出功能,则机器人将从未通过 Neucore 注册的成员中删除配置中的角色。
- 机器人无法踢出 Discord 配置中角色级别高于机器人的成员。
- 服务器所有者和机器人永远不会被踢出。
- 添加到频道的成员将获得该频道的“查看频道”权限,以及语音频道的“连接”权限,其他权限必须由角色或手动授予。
要求
- 一个 Neucore 安装或您自己的项目。
- MySQL 或 Maria DB 数据库。
设置 Discord 服务器和应用程序
- 创建 Discord 服务器
- 创建角色
- 为每个角色禁用“更改昵称”
- 在 https://discord.com/developers/applications 创建新应用。
- 添加 OAuth2 重定向 URL,将
{id}
替换为您的 Neucore 服务 ID(见下文)
https://your.neucore.tld/plugin/{id}/callback
. - 添加机器人。
- 启用
服务器成员意图
。 - 回到 OAuth2 -> URL 生成器,在 "作用域" 中勾选
bot
,然后勾选以下机器人权限
管理角色
,管理频道
,踢出成员
,创建即时邀请
,管理昵称
。
或者使用以下链接,将[your-client-ID]
替换为您的客户端 ID(在 OAuth2 页面上找到)
https://discord.com/api/oauth2/authorize?client_id=[your-client-ID]&permissions=402653203&scope=bot - 复制此 URL 并在浏览器中打开,以将机器人添加到您的服务器。
- 在您的服务器上,转到设置 -> 角色,将机器人的角色拖到要管理的角色之上。此外,将机器人角色拖到任何有成员想要机器人设置昵称的角色上。
- 如果您使用机器人管理频道成员,请从 "频道" 配置中添加机器人或其角色到频道,并为每个频道授予 "查看频道" 权限。对于语音频道,还需授予 "管理权限" 和 "连接" 权限。
安装
- 请按照以下链接中的插件安装说明进行操作: Neucore Plugins.md。
- 为插件创建一个新的数据库(例如 neucore_discord)。插件将自动创建表。
- 插件需要在 Neucore 服务器上以下环境变量
NEUCORE_DISCORD_PLUGIN_DB_DSN=mysql:dbname=neucore_discord;host=127.0.0.1;user=discord;password=pass
NEUCORE_DISCORD_PLUGIN_DB_USERNAME=username
仅当上面的 DSN 不包含 "user" 时需要。NEUCORE_DISCORD_PLUGIN_DB_PASSWORD=password
仅当上面的 DSN 不包含 "password" 时需要。
- 可选环境变量
NEUCORE_DISCORD_PLUGIN_DB_SSL_CA="/path/to/ca-cert.pem"
此选项启用连接的加密,即使它设置为空值。NEUCORE_DISCORD_PLUGIN_DB_SSL_VERIFY=1
- 添加新的 Neucore 服务。
其 ID(在显示插件配置时的 URL 中找到)需要用于 Discord 应用的重定向 URL 以及 "配置数据" 中的OAuthRedirectUri
值(见下文)。 - 从配置中选择 "Discord 身份验证" 插件。
- 调整底部 "配置数据" 字段中的所有值。格式为 YAML。
- 以下为必需项
- TableName - 允许的字符:
a-z A-Z 0-9 _
(无空格)。当保存插件配置时自动创建表。 - ServerId
- BotToken
- OAuthRedirectUri(也在 URL 中替换
{id}
为服务 ID) - OAuthClientId
- OAuthClientSecret
- TableName - 允许的字符:
- 以下为可选项,可以删除
- Roles
- Channels
- Nickname
- NoNicknameChange
- DoNotKick
- DisableKicks
- 以下为必需项
- 可选添加所需的组。
- 可选调整任何文本。
- 完成后激活插件。
此插件使用 Neucore 命令 "update-service-accounts" 来更新 Discord 角色等,因此请确保 Neucore cronjob 正在运行。
开发
composer install
运行测试
vendor/bin/phpunit --bootstrap vendor/autoload.php tests