#discord-bot #league #draft #serenity #poise #found #set

drftr

一个用于构建Discord机器人的工具库,可以创建你喜欢的任何东西的选秀

2个版本

0.1.1 2023年9月20日
0.1.0 2023年9月20日

#3 in #poise

MIT许可证

41KB
799

DRFTR

这是一个工具库,旨在与使用 PoiseSerenity 构建的Discord机器人集成。您可以使用其中找到的结构和方法来构建选秀联赛管理机器人。

我主要为了个人使用而构建了这个库,但我相信它对其他人也有帮助。有关更多信息,请参阅 完整文档

设置

在将此库添加到您的Rust Discord机器人之后,请确保创建一个实现DraftItem trait的结构体。这个结构体 必须 有一个返回唯一名称的方法,但除此之外可以包含您选择的尽可能少或尽可能多的数据。您可能希望每个DraftItem都包含一个指向物品图像的URL,例如,或一组相关统计数据(得分,KDA,位置等)。

您的机器人还应包含一个表示可能的选秀物品池的静态集合。此集合不需要包含实际的DraftItems,但您应该有一个从其中创建DraftItems的构造函数。

当将这些DraftItems传递到DRFTR方法中时,您还必须将它们放入一个Box中,并且在方法返回DraftItem时它们将被Boxed。

工作流程

此库中结构的一般工作流程旨在如下

    1. 最终用户将您的机器人添加到他们的Discord服务器,并调用一个如 /configure 或 /setup 的命令。此命令应执行 DraftGuild::new 关联函数,并将返回的 DraftGuild 存储在机器人内的一个集合中。
    1. 用户调用一个命令来创建一个新的联赛——一个特定的选秀。这应执行 League::new 关联函数,然后使用 DraftGuild::addleague 方法将那个联赛添加到命令起源的 DraftGuild 中。这 不会 激活联赛——根据我的经验,通常更倾向于将创建联赛和开始联赛分开,这样联赛组织者可以先进行必要的配置,然后在所有玩家都准备好后开始联赛。
    1. 用户调用命令以开始联盟。这应该执行League::activate方法,然后向输出通道发送消息,该通道可以是League中指定的,或者可以选择为DraftGuild的默认输出通道。此消息应提醒第一位玩家现在是他们的抽取轮次。
    1. 玩家调用命令以锁定他们的选择。如果调用命令的玩家是抽取中的活动座位,则应执行League::lock方法,否则执行League::add_to_player_queue方法。请注意,在您的机器人中,玩家队列无需手动锁定 - League::lock方法将按顺序访问每个玩家的队列,并在调用时锁定第一个排队的选择。记得发送通知告知每位玩家现在是他们的抽取轮次!ActivePlayer结构体包含一个id字段,应将其设置为玩家的Discord ID,以便用户提及变得简单。

玩家还应有一个命令从他们的队列中删除选择,这应该调用League::delete_from_player_queue,以及一个清除队列的命令,这应该调用League::clear_player_queue。

    1. 当抽取完成时,机器人应发送一条消息宣布这一点。然后,抽取将自动设置为非活动状态,因此玩家将无法锁定选择。他们仍然可以调用抽取命令,但DRFTR将返回LeagueError::LeagueInactiveError,这可以在您的机器人中转换为错误回复。
    1. 玩家在赛季期间可以调用命令放弃或交易他们的选择 - 这些应该分别调用League::waiver和League::trade。

DraftGuilds可以包含任何数量的League,无论是活动还是非活动,但每个Discord服务器应仅关联一个DraftGuild。您负责维护您的机器人中的DraftGuild集合。

依赖项

~22–39MB
~679K SLoC