pub struct GroupActivation {
pub group_id: String,
pub enabled: bool,
pub require_mention: bool,
pub cooldown_seconds: Option<u64>,
pub whitelist: Option<Vec<String>>,
}Expand description
群组激活配置
控制特定群组中的自动回复触发行为。
§字段说明
group_id: 群组的唯一标识符enabled: 是否在该群组启用自动回复(Requirement 5.5)require_mention: 是否要求 @提及才触发(Requirement 5.1, 5.2)cooldown_seconds: 群组特定的冷却时间覆盖(Requirement 5.3)whitelist: 群组特定的白名单覆盖(Requirement 5.4)
Fields§
§group_id: String群组 ID
enabled: bool是否启用自动回复 Validates: Requirement 5.5
require_mention: bool是否要求 @提及 Validates: Requirements 5.1, 5.2
cooldown_seconds: Option<u64>群组特定冷却时间(秒) Validates: Requirement 5.3
whitelist: Option<Vec<String>>群组特定白名单 Validates: Requirement 5.4
Implementations§
Source§impl GroupActivation
impl GroupActivation
Sourcepub fn new(group_id: impl Into<String>) -> Self
pub fn new(group_id: impl Into<String>) -> Self
创建新的群组激活配置
默认启用自动回复,不要求 @提及。
§参数
group_id- 群组 ID
§示例
use aster::auto_reply::GroupActivation;
let activation = GroupActivation::new("group-123");
assert!(activation.enabled);
assert!(!activation.require_mention);
assert!(activation.cooldown_seconds.is_none());
assert!(activation.whitelist.is_none());Sourcepub fn with_enabled(self, enabled: bool) -> Self
pub fn with_enabled(self, enabled: bool) -> Self
Sourcepub fn with_require_mention(self, require_mention: bool) -> Self
pub fn with_require_mention(self, require_mention: bool) -> Self
Sourcepub fn with_cooldown(self, seconds: u64) -> Self
pub fn with_cooldown(self, seconds: u64) -> Self
Sourcepub fn with_whitelist(self, users: Vec<String>) -> Self
pub fn with_whitelist(self, users: Vec<String>) -> Self
设置群组特定白名单
Validates: Requirement 5.4
§参数
users- 白名单用户列表
§示例
use aster::auto_reply::GroupActivation;
let activation = GroupActivation::new("group-123")
.with_whitelist(vec!["user1".to_string(), "user2".to_string()]);
assert!(activation.whitelist.is_some());
assert_eq!(activation.whitelist.as_ref().unwrap().len(), 2);Sourcepub fn should_trigger(
&self,
mentions_bot: bool,
) -> Result<(), GroupRejectionReason>
pub fn should_trigger( &self, mentions_bot: bool, ) -> Result<(), GroupRejectionReason>
检查消息是否应该触发自动回复
根据群组配置检查消息是否满足触发条件。
Validates: Requirements 5.1, 5.2, 5.5
§参数
mentions_bot- 消息是否 @提及了机器人
§返回值
返回 Ok(()) 如果应该触发,否则返回 Err(GroupRejectionReason)。
§示例
use aster::auto_reply::{GroupActivation, GroupRejectionReason};
// 禁用的群组
let disabled = GroupActivation::disabled("group-123");
assert_eq!(disabled.should_trigger(true), Err(GroupRejectionReason::GroupDisabled));
// 要求 @提及的群组
let require_mention = GroupActivation::new("group-456").with_require_mention(true);
assert_eq!(require_mention.should_trigger(false), Err(GroupRejectionReason::RequiresMention));
assert_eq!(require_mention.should_trigger(true), Ok(()));Sourcepub fn is_user_whitelisted(&self, user_id: &str) -> Option<bool>
pub fn is_user_whitelisted(&self, user_id: &str) -> Option<bool>
检查用户是否在群组白名单中
Validates: Requirement 5.4
§参数
user_id- 用户 ID
§返回值
- 如果没有设置群组白名单,返回
None(使用全局白名单) - 如果设置了群组白名单且用户在其中,返回
Some(true) - 如果设置了群组白名单但用户不在其中,返回
Some(false)
§示例
use aster::auto_reply::GroupActivation;
// 没有群组白名单
let no_whitelist = GroupActivation::new("group-123");
assert_eq!(no_whitelist.is_user_whitelisted("any_user"), None);
// 有群组白名单
let with_whitelist = GroupActivation::new("group-456")
.with_whitelist(vec!["user1".to_string()]);
assert_eq!(with_whitelist.is_user_whitelisted("user1"), Some(true));
assert_eq!(with_whitelist.is_user_whitelisted("user2"), Some(false));Sourcepub fn effective_cooldown(&self, default_cooldown: u64) -> u64
pub fn effective_cooldown(&self, default_cooldown: u64) -> u64
获取有效的冷却时间
Validates: Requirement 5.3
§参数
default_cooldown- 默认冷却时间(秒)
§返回值
返回群组特定冷却时间,如果未设置则返回默认值。
§示例
use aster::auto_reply::GroupActivation;
// 没有群组冷却时间
let no_cooldown = GroupActivation::new("group-123");
assert_eq!(no_cooldown.effective_cooldown(60), 60);
// 有群组冷却时间
let with_cooldown = GroupActivation::new("group-456").with_cooldown(120);
assert_eq!(with_cooldown.effective_cooldown(60), 120);Sourcepub fn is_enabled(&self) -> bool
pub fn is_enabled(&self) -> bool
检查群组是否启用
Validates: Requirement 5.5
Sourcepub fn requires_mention(&self) -> bool
pub fn requires_mention(&self) -> bool
检查是否要求 @提及
Validates: Requirement 5.1
Sourcepub fn has_custom_cooldown(&self) -> bool
pub fn has_custom_cooldown(&self) -> bool
检查是否有群组特定冷却时间
Validates: Requirement 5.3
Sourcepub fn has_custom_whitelist(&self) -> bool
pub fn has_custom_whitelist(&self) -> bool
检查是否有群组特定白名单
Validates: Requirement 5.4
Trait Implementations§
Source§impl Clone for GroupActivation
impl Clone for GroupActivation
Source§fn clone(&self) -> GroupActivation
fn clone(&self) -> GroupActivation
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for GroupActivation
impl Debug for GroupActivation
Source§impl<'de> Deserialize<'de> for GroupActivation
impl<'de> Deserialize<'de> for GroupActivation
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl PartialEq for GroupActivation
impl PartialEq for GroupActivation
Source§impl Serialize for GroupActivation
impl Serialize for GroupActivation
impl StructuralPartialEq for GroupActivation
Auto Trait Implementations§
impl Freeze for GroupActivation
impl RefUnwindSafe for GroupActivation
impl Send for GroupActivation
impl Sync for GroupActivation
impl Unpin for GroupActivation
impl UnsafeUnpin for GroupActivation
impl UnwindSafe for GroupActivation
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::RequestCreates a shared type from an unshared type.
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Pipes by value. This is generally the method you want to use. Read more
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
Borrows
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
Mutably borrows
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
Borrows
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
Mutably borrows
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
Borrows
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Immutable access to the
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
Mutable access to the
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
Immutable access to the
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
Mutable access to the
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Immutable access to the
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Mutable access to the
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
Calls
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
Calls
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
Calls
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
Calls
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
Calls
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
Calls
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
Calls
.tap_deref() only in debug builds, and is erased in release
builds.