mirror of
http://shenjack.top:5100/shenjack/icalingua-python-bot.git
synced 2024-11-23 04:31:05 +08:00
看起来行了?
This commit is contained in:
parent
b286765213
commit
9ba8cfaba3
|
@ -51,11 +51,13 @@ pub struct UpdateDMConverse {
|
|||
#[allow(unused)]
|
||||
pub type Writeable<T> = Arc<RwLock<T>>;
|
||||
|
||||
#[allow(unused)]
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct BotStatus {
|
||||
user_id: UserId,
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
impl BotStatus {
|
||||
pub fn new(user_id: UserId) -> Self { Self { user_id } }
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ use crate::error::{ClientResult, IcaError};
|
|||
use crate::{version_str, StopGetter};
|
||||
|
||||
/// icalingua 客户端的兼容版本号
|
||||
pub const ICA_PROTOCOL_VERSION: &str = "2.12.20";
|
||||
pub const ICA_PROTOCOL_VERSION: &str = "2.12.21";
|
||||
|
||||
pub async fn start_ica(config: &IcaConfig, stop_reciver: StopGetter) -> ClientResult<(), IcaError> {
|
||||
let span = span!(Level::INFO, "Icalingua Client");
|
||||
|
|
|
@ -43,7 +43,6 @@ pub async fn delete_message(client: &Client, message: &DeleteMessage) -> bool {
|
|||
/// ```
|
||||
// #[allow(dead_code)]
|
||||
// pub async fn fetch_history(client: &Client, roomd_id: RoomId) -> bool { false }
|
||||
|
||||
async fn inner_sign(payload: Payload, client: Client) -> ClientResult<(), IcaError> {
|
||||
let span = span!(Level::INFO, "signing icalingua");
|
||||
let _guard = span.enter();
|
||||
|
|
|
@ -187,7 +187,7 @@ pub async fn any_event(event: Event, payload: Payload, _client: Client) {
|
|||
"closeLoading", // 发送消息/加载新聊天 有一个 loading
|
||||
"renewMessage", // 我也不确定到底是啥事件
|
||||
"requestSetup", // 需要登录
|
||||
"updateRoom",
|
||||
"updateRoom", // 更新房间
|
||||
];
|
||||
match &event {
|
||||
Event::Custom(event_name) => {
|
||||
|
|
|
@ -95,8 +95,15 @@ macro_rules! async_any_callback_with_state {
|
|||
}};
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> anyhow::Result<()> { inner_main().await }
|
||||
fn main() -> anyhow::Result<()> {
|
||||
tokio::runtime::Builder::new_multi_thread()
|
||||
.enable_all()
|
||||
.thread_name("shenbot-rs")
|
||||
.worker_threads(4)
|
||||
.build()
|
||||
.unwrap()
|
||||
.block_on(inner_main())
|
||||
}
|
||||
|
||||
async fn inner_main() -> anyhow::Result<()> {
|
||||
// -d -> debug
|
||||
|
|
|
@ -64,6 +64,14 @@ pub fn verify_and_reload_plugins() {
|
|||
let mut need_reload_files: Vec<PathBuf> = Vec::new();
|
||||
let plugin_path = MainStatus::global_config().py().plugin_path.clone();
|
||||
|
||||
// 先检查是否有插件被删除
|
||||
for path in PyStatus::get_map_mut().keys() {
|
||||
if !path.exists() {
|
||||
event!(Level::INFO, "Python 插件: {:?} 已被删除", path);
|
||||
PyStatus::delete_file(path);
|
||||
}
|
||||
}
|
||||
|
||||
for entry in std::fs::read_dir(plugin_path).unwrap().flatten() {
|
||||
let path = entry.path();
|
||||
if let Some(ext) = path.extension() {
|
||||
|
@ -76,7 +84,7 @@ pub fn verify_and_reload_plugins() {
|
|||
if need_reload_files.is_empty() {
|
||||
return;
|
||||
}
|
||||
info!("file change list: {:?}", need_reload_files);
|
||||
event!(Level::INFO, "更改列表: {:?}", need_reload_files);
|
||||
let exist_plugins = PyStatus::get_map_mut();
|
||||
for reload_file in need_reload_files {
|
||||
if let Some(plugin) = exist_plugins.get_mut(&reload_file) {
|
||||
|
|
|
@ -73,7 +73,12 @@ impl TailchatClientPy {
|
|||
#[getter]
|
||||
pub fn get_startup_time(&self) -> SystemTime { crate::MainStatus::get_startup_time() }
|
||||
#[pyo3(signature = (content, converse_id, group_id = None))]
|
||||
pub fn new_message(&self, content: String, converse_id: ConverseId, group_id: Option<GroupId>) -> TailchatSendingMessagePy {
|
||||
pub fn new_message(
|
||||
&self,
|
||||
content: String,
|
||||
converse_id: ConverseId,
|
||||
group_id: Option<GroupId>,
|
||||
) -> TailchatSendingMessagePy {
|
||||
TailchatSendingMessagePy {
|
||||
message: SendingMessage::new(content, converse_id, group_id, None),
|
||||
}
|
||||
|
|
|
@ -42,9 +42,7 @@ impl PyStatus {
|
|||
pub fn add_file(path: PathBuf, plugin: PyPlugin) { Self::get_map_mut().insert(path, plugin); }
|
||||
|
||||
/// 删除一个插件
|
||||
pub fn delete_file(path: &PathBuf) -> Option<PyPlugin> {
|
||||
Self::get_map_mut().remove(path)
|
||||
}
|
||||
pub fn delete_file(path: &PathBuf) -> Option<PyPlugin> { Self::get_map_mut().remove(path) }
|
||||
|
||||
pub fn verify_file(path: &PathBuf) -> bool {
|
||||
Self::get_map().get(path).map_or(false, |plugin| plugin.verifiy())
|
||||
|
@ -52,11 +50,13 @@ impl PyStatus {
|
|||
|
||||
pub fn get_map() -> &'static PyPlugins {
|
||||
unsafe {
|
||||
match PYSTATUS.files.as_ref() {
|
||||
let ptr = &raw const PYSTATUS.files;
|
||||
let ptr = &*ptr;
|
||||
match ptr.as_ref() {
|
||||
Some(files) => files,
|
||||
None => {
|
||||
Self::init();
|
||||
PYSTATUS.files.as_ref().unwrap()
|
||||
ptr.as_ref().unwrap()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -64,11 +64,13 @@ impl PyStatus {
|
|||
|
||||
pub fn get_map_mut() -> &'static mut PyPlugins {
|
||||
unsafe {
|
||||
match PYSTATUS.files.as_mut() {
|
||||
let ptr = &raw mut PYSTATUS.files;
|
||||
let ptr = &mut *ptr;
|
||||
match ptr {
|
||||
Some(files) => files,
|
||||
None => {
|
||||
Self::init();
|
||||
PYSTATUS.files.as_mut().unwrap()
|
||||
ptr.as_mut().unwrap()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -76,11 +78,13 @@ impl PyStatus {
|
|||
|
||||
pub fn get_config() -> &'static config::PluginConfigFile {
|
||||
unsafe {
|
||||
match PYSTATUS.config.as_ref() {
|
||||
let ptr = &raw const PYSTATUS.config;
|
||||
let ptr = &*ptr;
|
||||
match ptr {
|
||||
Some(config) => config,
|
||||
None => {
|
||||
Self::init();
|
||||
PYSTATUS.config.as_ref().unwrap()
|
||||
ptr.as_ref().unwrap()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -88,11 +92,13 @@ impl PyStatus {
|
|||
|
||||
pub fn get_config_mut() -> &'static mut config::PluginConfigFile {
|
||||
unsafe {
|
||||
match PYSTATUS.config.as_mut() {
|
||||
let ptr = &raw mut PYSTATUS.config;
|
||||
let ptr = &mut *ptr;
|
||||
match ptr {
|
||||
Some(config) => config,
|
||||
None => {
|
||||
Self::init();
|
||||
PYSTATUS.config.as_mut().unwrap()
|
||||
ptr.as_mut().unwrap()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,20 +44,37 @@ impl BotStatus {
|
|||
unsafe { MAIN_STATUS.startup_time.unwrap() }
|
||||
}
|
||||
|
||||
pub fn global_config() -> &'static BotConfig { unsafe { MAIN_STATUS.config.as_ref().unwrap() } }
|
||||
pub fn global_config() -> &'static BotConfig {
|
||||
unsafe {
|
||||
let ptr = &raw const MAIN_STATUS.config;
|
||||
(*ptr).as_ref().unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn global_ica_status() -> &'static ica::MainStatus {
|
||||
unsafe { MAIN_STATUS.ica_status.as_ref().unwrap() }
|
||||
unsafe {
|
||||
let ptr = &raw const MAIN_STATUS.ica_status;
|
||||
(*ptr).as_ref().unwrap()
|
||||
}
|
||||
}
|
||||
pub fn global_tailchat_status() -> &'static tailchat::MainStatus {
|
||||
unsafe { MAIN_STATUS.tailchat_status.as_ref().unwrap() }
|
||||
unsafe {
|
||||
let ptr = &raw const MAIN_STATUS.tailchat_status;
|
||||
(*ptr).as_ref().unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn global_ica_status_mut() -> &'static mut ica::MainStatus {
|
||||
unsafe { MAIN_STATUS.ica_status.as_mut().unwrap() }
|
||||
unsafe {
|
||||
let ptr = &raw mut MAIN_STATUS.ica_status;
|
||||
(*ptr).as_mut().unwrap()
|
||||
}
|
||||
}
|
||||
pub fn global_tailchat_status_mut() -> &'static mut tailchat::MainStatus {
|
||||
unsafe { MAIN_STATUS.tailchat_status.as_mut().unwrap() }
|
||||
unsafe {
|
||||
let ptr = &raw mut MAIN_STATUS.tailchat_status;
|
||||
(*ptr).as_mut().unwrap()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user