tkhamez/neucore-discord-plugin

4.0.0 2023-08-04 15:31 UTC

This package is auto-updated.

Last update: 2024-09-16 20:20:03 UTC


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
    • 以下为可选项,可以删除
      • Roles
      • Channels
      • Nickname
      • NoNicknameChange
      • DoNotKick
      • DisableKicks
  • 可选添加所需的组。
  • 可选调整任何文本。
  • 完成后激活插件。

此插件使用 Neucore 命令 "update-service-accounts" 来更新 Discord 角色等,因此请确保 Neucore cronjob 正在运行。

开发

composer install

运行测试

vendor/bin/phpunit --bootstrap vendor/autoload.php tests