old_flsystem/应用/DYRebate/MessageOperation.cs

668 lines
34 KiB
C#
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Api.Framework;
using Api.Framework.EntityTmp.Douyin;
using Api.Framework.Enums;
using Api.Framework.Events;
using Api.Framework.Model;
using Api.Framework.SDK;
using Api.Framework.Timers;
using Api.Framework.Tools;
using CsharpHttpHelper;
using DYRebate.Entitys;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using Api.Framework.Utils;
using static DYRebate.Class1;
namespace DYRebate
{
public class MessageOperation
{
private static List<string> AddMessUsernameList = new List<string>() { "wxid_mjzeh4qj9hio22", "wxid_lrf1mr7ond6622", "wujiahua0876", "wxid_2ufntuf4purl22", "wxid_bua0te17il7i22" };
ReciveIMEvent e = null;
Class1 plugin = null;
object sender = null;
public MessageOperation(object sender, ReciveIMEvent e, Class1 plugin)
{
this.e = e;
this.plugin = plugin;
this.sender = sender;
}
#region
public bool BindOrderId()
{
try
{
#region
var orderid = e.Message.Trim();
#region
if (Regex.IsMatch(orderid, @"^\d{19}$"))
{
var oid = long.Parse(orderid);
if (oid < 4000000000000000000)
{
return false;
}
var db = ApiClient.GetSession();
var dy_orders_temp = db.Find<fl_order_douyin>("select * from fl_order_douyin where order_id = @order_id", new { order_id = orderid });
var memberTmp = e.GetMemberinfo();
if (dy_orders_temp != null && dy_orders_temp.Count != 0)
{
var member = dy_orders_temp.FirstOrDefault(f => f.db_userid != 0 && f.db_userid != memberTmp.id);
if (member != null)
{
//订单已经被他人绑定
e.SendMessage(Class1.Config.OccupyOrderErrorTip.Replace("[订单号]", orderid));
return true;
}
var notices = new List<OrderNoticeEvent>();
var downDyTimer = new DownDouyinTimer();
#region ,
var bindOrders = dy_orders_temp.Where(f => f.db_userid != 0).ToList();
if (bindOrders != null && bindOrders.Count != 0)
{
foreach (var order in bindOrders)
{
var point = HttpHelper.JsonToObject<ItemPoint>(order.db_point) as ItemPoint;
memberTmp = e.GetMemberinfo(true);
if (order.db_status == SystemOrderStatus.)
e.SendMessage(new VariateReplace().CommonReplace(Class1.Config.OrderRepetBindTip, order, memberTmp, point));
else
e.SendMessage(Class1._GetOrderStateMess(order.db_status, (order.db_status == SystemOrderStatus. ? SettleType. : SettleType.), order, memberTmp, point));
Thread.Sleep(500);
}
//return;
}
#endregion
#region ( => )
var notBindOrders = dy_orders_temp.Where(f => f.db_userid == 0).ToList();
if (notBindOrders != null && notBindOrders.Count != 0)
{
if (HttpExtend.GetDateTime(notBindOrders[0].pay_time.ToString()) < ApiClient.Setting.SystemConfig.allow_bind_create_order_time)
{
e.SendMessage($"订单:{orderid},已经过了有效绑定时间!");
return true;
}
foreach (var order in notBindOrders)
{
if (order.db_status == SystemOrderStatus.)
order.db_endtime = DateTime.Now.AddMinutes(-5);//重新结算的话,需要将订单的冻结时间重新赋值,让后台处理
//没有绑定用户的订单进行绑定
order.db_userid = memberTmp.id;
order.db_robotname = e.RobotName;
order.db_robottype = e.RobotInfo.type;
order.msg_groupid = e.Groupid;
#region ,
//查询历史查询比例
var compute = db.FindQueryRatioHist(CpsType., order.id);
if (compute == null)
{
var query_item = db.FindSingle<fl_query_hist>("select * from fl_query_hist where userid = @userid and itemid = @itemid and adzoneid = @adzoneid order by id desc", new { userid = e.GetMemberinfo().id, itemid = order.product_id, adzoneid = order.db_cpsname });
//计算公式不为空
if (query_item != null && !string.IsNullOrWhiteSpace(query_item.compute_configdic))
{
try
{
compute = JsonConvert.DeserializeObject<Compute>(query_item.compute_configdic);
var queryRatioHist = new fl_query_ratio_hist()
{
compute_config = query_item.compute_configdic,
db_orderid = order.id,
createtime = DateTime.Now,
cpstype = CpsType.
};
db.SaveOrUpdate(queryRatioHist);
}
catch (Exception ex)
{
EventClient.OnEvent("抖音计算", $"获取历史查询比异常:{ex.Message}");
}
}
}
ItemPoint itempoint = null;
//计算的佣金
if (compute != null)
itempoint = db.FindItemPoint(CpsType., compute, Util.ConvertDouble_FenToYuan(order.estimated_comission), 1);
else
itempoint = db.FindItemPoint(memberTmp, Util.ConvertDouble_FenToYuan(order.estimated_comission), 1, CpsType.);
if (itempoint != null)
{
order.db_point = HttpHelper.ObjectToJson(itempoint);
order.db_userpoint = itempoint.UserPoint;
}
#endregion
#region 1
if (memberTmp != null)
{
memberTmp.bind_order++;
memberTmp = db.UpdateMemberGroup(memberTmp);
}
#endregion
#region
var record = db.FindStatisticsRecord(memberTmp.id);
if (record == null)
{
record = new fl_statistics_record() { uid = memberTmp.id, ex2 = 0, ex4 = HttpExtend.GetTimeStamp(DateTime.Now) };
db.Saveable(record).ExecuteCommand();
}
else
{
if (record.ex2 == 0 && record.ex4 == 0)
{
record.ex4 = HttpExtend.GetTimeStamp(DateTime.Now);
db.Saveable(record).ExecuteCommand();
}
}
#endregion
db.SaveOrUpdate(order);
downDyTimer.UpdateOrder(order, notices, db, isFrontData: true);
}
}
#endregion
#region
if (!ApiClient.Setting.SystemConfig.message_warning_switch && notices.Count != 0)
{
var tasks = TimerTask.GetTimer<Update_NoticeQueue>() as Update_NoticeQueue;
foreach (var item in notices)
{
//if (item.IsRewards)
tasks.Add(item);
//else
//plugin.SDK_OrderNoticeEvent(this, item);
}
}
#endregion
}
else
{
#region ,
e.SendMessage(Class1.Config.NotFoundOrderErrorTip.Replace("[订单号]", orderid));
var bind = db.FindBindCache(orderid);
if (bind == null)
{
db.Insertable(new fl_bind_cache() { crt_time = DateTime.Now, db_robotid = e.RobotInfo.id, orderid = orderid, groupid = e.Groupid, db_userid = memberTmp.id }).ExecuteCommand();
db.FindBindCache(orderid, true);
}
#endregion
}
//消息已经处理完成,将不往后面的插件传递
e.Cancel = true;
return true;
}
#endregion
//判断消息是否是其他cps平台的订单号
if (OrderHelper.IsOrderId(e.Message.Trim()))
return true;
#endregion
}
catch (Exception ex)
{
plugin.OnLog($"手动绑定订单号异常:{ex.Message}_{ex.StackTrace}");
}
return false;
}
#endregion
public bool AnalyseFanLi()
{
//计算公式
Compute compute = null;
var memberTmp = e.GetMemberinfo();
try
{
var db = ApiClient.GetSession();
var dyinfoTemps = db.FindDyInfoTempGroups();
var dyInfoTemp = dyinfoTemps.FirstOrDefault(f => f.name == e.RobotInfo.name && f.onoff == false);
if (dyInfoTemp == null) return false;
var message = e.Message.Trim();
//推广位
var pid = string.Empty;
fl_cps_member dy_cps = null;
var isDefault = true;
if (!string.IsNullOrWhiteSpace(e.Groupid))//群pid
{
var groupAdzone = db.FindAdzoneInfos().FirstOrDefault(f => f.alliance_id == (int)CpsType. && f.custom_type == PrivateAdzoneCustomType.pid.ToString() && f.group_id == e.Groupid);
if (groupAdzone != null && !string.IsNullOrWhiteSpace(groupAdzone.adzone_pid))
{
pid = groupAdzone.adzone_pid;
dy_cps = CpsClient.Members.FirstOrDefault(f => f.cpstype == CpsType. && f.username == groupAdzone.adzone_pid_cps_name);
isDefault = false;
}
}
if (isDefault)//私人pid
{
var memberAdzone = db.FindAdzoneInfos().FirstOrDefault(f => f.alliance_id == (int)CpsType. && f.custom_type == PrivateAdzoneCustomType.pid.ToString() && f.member_id == memberTmp.id);
if (memberAdzone != null && !string.IsNullOrWhiteSpace(memberAdzone.adzone_pid))//私人推广位
{
pid = memberAdzone.adzone_pid;
dy_cps = CpsClient.Members.FirstOrDefault(f => f.cpstype == CpsType. && f.username == memberAdzone.adzone_pid_cps_name);
isDefault = false;
}
}
if (isDefault)//默认推广位
{
dy_cps = CpsClient.Members.FirstOrDefault(f => f.cpstype == CpsType. && f.username == ((memberTmp.buy_point >= Class1.Config.Point && memberTmp.finish_order >= Class1.Config.OrderNum) ? dyInfoTemp.pid_chief_cps_name : dyInfoTemp.pid_deputy_cps_name));//通过判断用户的购物积分,来判断用户使用哪个推广位
pid = ((memberTmp.buy_point >= Class1.Config.Point && memberTmp.finish_order >= Class1.Config.OrderNum) ? dyInfoTemp.pid_chief : dyInfoTemp.pid_deputy);
}
if (dy_cps == null) throw new Exception("抖音推广位设置异常,请检测后重试!");
var api = CpsClient.CreateDouyinRequest(dy_cps);
if (api == null) throw new Exception("@创建抖音API请求失败");
var title = string.Empty;//商品标题
//判断消息中是否包含抖音链接信息
var promotion_id = string.Empty;//促销id
//api.ConvertInstPickSource(e.Message);
//api.GetShareMaterial();
//var itemid = e.Message.Trim();
var itemid = api.GetDyGoodsID(message, out promotion_id);
#region id搜索
if (string.IsNullOrEmpty(itemid))
return false;
if (!ApiClient.Setting.SystemConfig.message_warning_switch)
e.SendMessage(Class1.Config.SearchingTip);
try
{
//屏蔽商品
if (Class1.Config.ItemIDRestrictList.Contains(itemid))
{
e.SendMessage(Class1.Config.ItemIDRestrictTip.Replace("[商品ID]", itemid));
return true;
}
var items = api.FindItemInfo(itemid);
if (items == null || items.products == null || items.products.Count == 0)
throw new Exception("商品不存在");
var goods = items.products[0];
var shopUrl = string.Empty;
ShareInfo extInfo = null;
var isApiSharable = false;
if (Class1.Config.AllRebateModelSwitch == SwitchType.)
{
if (goods.sharable != "false")
{
try
{
extInfo = api.ConvertUrl(goods.detail_url, pid, $"{e.GetMemberinfo().username}");
isApiSharable = true;
}
catch (Exception)
{ }
}
}
var rateTmp = 0m;
//if (goods.sharable == "false")//throw new Exception("商品未推广");
if (!isApiSharable)//throw new Exception("商品未推广");
{
var key = $"{itemid}";
var value = Comm.GetCache(key);
if (!string.IsNullOrWhiteSpace(value))
shopUrl = value;
else
{
if (string.IsNullOrWhiteSpace(promotion_id))
throw new Exception("商品未推广");
isApiSharable = false;
if (!api.BindGoods(itemid, promotion_id))
{
throw new Exception("添加商品异常");
}
shopUrl = api.GetShopWindow_PromotionUrlToGoodsId(itemid);
if (string.IsNullOrWhiteSpace(shopUrl))
throw new Exception("未获取推广链接");
var info = api.FindGoodsInfo(promotion_id);
if (info != null)
rateTmp = (decimal)info.data.cos_ratio / 10000m;
Comm.SetCache(key, shopUrl, 15 * 60);
}
}
//店铺名称
var nick = goods.shop_name;
//商品主图
var pict_url = !string.IsNullOrWhiteSpace(goods.cover) ? goods.cover : (goods.imgs != null && goods.imgs.Count != 0) ? goods.imgs[0] : string.Empty;
//商品标题//&lt; &gt;&amp;&quot;&copy; <>&",©;
title = goods.title.Replace("", "").Replace("&lt;", "<").Replace("&gt;", ">").Replace("&amp;", "&").Replace("&quot;", "\"").Replace(" &copy;", "©");//这里有个看不见的字符,要将其替换掉
//原价
var price = decimal.Parse((goods.price / 100m).ToString());
//减去技术费的总佣金(不用券)
var calcPrice = Math.Round((price * 0.9m), 2, MidpointRounding.AwayFromZero);
//30天销量
var volume = goods.sales;
//佣金率
var commission_rate = (decimal)goods.cos_ratio / 100m;
if (rateTmp != 0 && commission_rate != rateTmp)
commission_rate = rateTmp;
//优惠券金额
var coupon_price = 0.00m;
#region xxx
//if (goods.sale_infos != null && goods.sale_infos.Count != 0)
//{
// var coupon_tmp = 0m;
// for (int i = 0; i < goods.sale_infos.Count; i++)
// {
// if (goods.sale_infos[i].title.Contains("减"))
// {
// var splitStrs = goods.sale_infos[i].title.Split(new string[] { "减" }, StringSplitOptions.RemoveEmptyEntries);
// if (splitStrs != null && splitStrs.Length == 2)
// {
// var now = decimal.Parse(splitStrs[0]);
// if (price >= now)
// {
// if (now > coupon_tmp)
// {
// coupon_tmp = now;
// coupon_price = decimal.Parse(splitStrs[1]);
// }
// }
// }
// }
// }
//}
#endregion
//券后价
var endPrice = (decimal)((goods.coupon_price ?? 0) / 100d);
if (endPrice != 0)
{
if (endPrice < price)
coupon_price = price - endPrice;
}
//券后佣金
var useCalcPrice = endPrice * 0.9m;
//用券后 佣金
var useCoupon_totalCommFee = (double)Math.Round(useCalcPrice * commission_rate, 2);
//用券后 给用户的佣金
var useCoupon_commFee = db.FindItemPoint(memberTmp, useCoupon_totalCommFee, 1, CpsType., out compute);
Compute compute1 = null;
//不用券 佣金
var unuseCoupon_totalCommFee = Math.Round(calcPrice * commission_rate, 2);
//不用券 给用户的佣金
var unuseCoupon_commFee = db.FindItemPoint(memberTmp, (double)unuseCoupon_totalCommFee, 1, CpsType., out compute1);
if (compute == null)
compute = compute1;
LogHelper.GetSingleObj().Info("", $"抖音佣金计算:券后价{useCoupon_totalCommFee},佣金:{useCalcPrice} ||| 无券价:{unuseCoupon_totalCommFee},佣金:{unuseCoupon_totalCommFee} @@ 佣金率:{commission_rate} => {itemid}");
// 获取短链接
//var shopShortLink = ApiClient.ShortURL(shopUrl, Class1.Config.Dwz_Type).Result;
//抖音缩短链接
var shopShortLink = string.Empty;
//抖音口令
var password = string.Empty;
if (isApiSharable)
{
if (extInfo == null)
extInfo = api.ConvertUrl(goods.detail_url, pid, $"{e.GetMemberinfo().username}");
if (extInfo == null)
throw new Exception("转链异常");
password = extInfo.dy_password;
var reg = Regex.Match(extInfo.dy_password, "(?<口令>[︽#]{2}[0-9a-zA-Z]{9,}[︽#]{2})", RegexOptions.IgnoreCase | RegexOptions.Multiline);
if (reg.Success)
password = reg.Groups["口令"].ToString();
}
else
{
password = DYHelper.CreateKouling(shopUrl);
if (!string.IsNullOrWhiteSpace(password))
{
shopShortLink = DYHelper.ShortDyUrl(shopUrl);
shopUrl = string.Empty;
}
else
{
shopShortLink = DYHelper.ShortDyUrl(shopUrl);
}
//api.DelGoodsWindowUrl(promotion_id);
var pidhist = db.Queryable<fl_plugin_dy_pidhist>().First(g => g.cpsname == api.Member.username && g.pid == promotion_id);
if (pidhist == null)
pidhist = new fl_plugin_dy_pidhist() { pid = promotion_id, cpsname = api.Member.username };
pidhist.expirestime = DateTime.Now.AddHours(1);
db.Saveable(pidhist).ExecuteCommand();
}
#region
//有券的情况
if (coupon_price != 0)
{
var mess = string.Empty;
if (e.ChatType == ChatType. || e.ChatType == ChatType. || (e.ChatType == ChatType.QQ && string.IsNullOrWhiteSpace(Class1.Config.QQSearchSuccessWithCouponTip)))
{
if (!string.IsNullOrWhiteSpace(shopShortLink))
mess = Class1.Config.SearchSuccessWithCouponTip;
else
mess = Class1.Config.SearchSuccessWithCouponTip_kl;
}
else
{
if (!string.IsNullOrWhiteSpace(shopShortLink))
mess = Class1.Config.QQSearchSuccessWithCouponTip;
else
mess = Class1.Config.QQSearchSuccessWithCouponTip_kl;
}
if (AddMessUsernameList.Contains(e.GetMemberinfo().username))
mess += "[分段][延迟=1]" + shopUrl;
e.SendMessage(mess
.Replace("劵", "券")
.Replace("[商品标题]", mess.Contains("<appmsg") ? title.Replace("<", "").Replace(">", "") : title)
.Replace("[商品原价]", string.Format("{0:F}", price))
.Replace("[商品主图]", $"[图片={pict_url}]")
.Replace("[图片地址]", pict_url)
.Replace("[月销量]", volume.ToString())
.Replace("[店铺名称]", nick)
.Replace("[券后返利]", string.Format("{0:F}", useCoupon_commFee.UserPoint))
.Replace("[弃券返利]", string.Format("{0:F}", unuseCoupon_commFee.UserPoint))
.Replace("[券后价]", string.Format("{0:F}", endPrice))
.Replace("[优惠券金额]", coupon_price.ToString())
.Replace("[购买地址]", shopShortLink)
.Replace("[购买口令]", password.Replace("#", "︽"))
.Replace("[共节省]", ((decimal)coupon_price + (decimal)useCoupon_commFee.UserPoint).ToString())
.Replace("[商品图片]", mess.Contains("[商品图片]") ? "[图片=" + ApiClient.GetQRImage(title, string.Format("{0:F}", price), coupon_price.ToString(), endPrice.ToString(), pict_url, shopShortLink, ApiClient.QrImageType.B, CpsType.) + "]" : string.Empty)
);
}
else//没有券的情况
{
var mess = string.Empty;
if (e.ChatType == ChatType. || e.ChatType == ChatType. || (e.ChatType == ChatType.QQ && string.IsNullOrWhiteSpace(Class1.Config.QQSearchSuccessWithoutCouponTip)))
{
if (!string.IsNullOrWhiteSpace(shopShortLink))
mess = Class1.Config.SearchSuccessWithoutCouponTip;
else
mess = Class1.Config.SearchSuccessWithoutCouponTip_kl;
}
else
{
if (!string.IsNullOrWhiteSpace(shopShortLink))
mess = Class1.Config.QQSearchSuccessWithoutCouponTip;
else
mess = Class1.Config.QQSearchSuccessWithoutCouponTip_kl;
}
if (AddMessUsernameList.Contains(e.GetMemberinfo().username))
mess += "[分段][延迟=1]" + shopUrl;
e.SendMessage(mess
.Replace("[商品标题]", mess.Contains("<appmsg") ? title.Replace("<", "").Replace(">", "") : title)
.Replace("[商品原价]", string.Format("{0:F}", price))
.Replace("[商品主图]", $"[图片={pict_url}]")
.Replace("[图片地址]", pict_url)
.Replace("[月销量]", volume.ToString())
.Replace("[店铺名称]", nick)
.Replace("[返利积分]", string.Format("{0:F}", unuseCoupon_commFee.UserPoint))
.Replace("[购买地址]", shopShortLink)
.Replace("[购买口令]", password.Replace("#", "︽"))
.Replace("[共节省]", string.Format("{0:F}", useCoupon_commFee.UserPoint))
.Replace("[商品图片]", mess.Contains("[商品图片]") ? "[图片=" + ApiClient.GetQRImage(title, price.ToString(), "0", price.ToString(), pict_url, shopShortLink, ApiClient.QrImageType.B, CpsType.) + "]" : string.Empty)
);
}
#endregion
#region ,,,
db.Insertable(new fl_query_hist()
{
crt_time = DateTime.Now,
type = CpsType.,
itemid = itemid,
groupid = e.Groupid,
robot_name = e.RobotName,
robot_type = e.ChatType,
userid = memberTmp.id,
title = title,
adzoneid = dy_cps.username,
mallid = goods.shop_id.ToString(),
compute_configdic = compute == null ? string.Empty : JsonConvert.SerializeObject(compute)
}).ExecuteCommand();
db.UpdateRecord(memberTmp.id);
var shared = new Dictionary<string, object>();
shared["msg_type"] = "查询宝贝";
shared["cps_type"] = CpsType.;
shared["msg_username"] = memberTmp.username;
shared["price"] = string.Format("{0:F}", price);
shared["title"] = title;
shared["coupon_price"] = string.Format("{0:F}", coupon_price);
shared["user_point"] = coupon_price != 0 ? string.Format("{0:F}", useCoupon_commFee.UserPoint) : string.Format("{0:F}", unuseCoupon_commFee.UserPoint);
shared["economize"] = coupon_price != 0 ? string.Format("{0:F}", ((decimal)coupon_price + (decimal)useCoupon_commFee.UserPoint)) : string.Format("{0:F}", useCoupon_commFee.UserPoint);
var sharedEvent = new SharedEvents(shared);
EventClient.OnEvent(sender, sharedEvent);
#endregion
return true;
}
catch (Exception ex)
{
//{"code":90000,"err_no":7,"log_id":"202202271755520101330360171F8980A6","message":"商家已设置该商品仅指定作者可推广,请您更换其他商品","msg":"未知错误此错误会逐步细化明确请不要依赖sub_code或sub_msg做业务判断","sub_code":"isp.unknown-error","sub_msg":"1025:商家已设置该商品仅指定作者可推广,请您更换其他商品"}
if (ex.Message.Contains("商品不存在") || ex.Message.Contains("商品未推广") || ex.Message.Contains("未获取推广链接") || ex.Message.Contains("添加商品异常") | ex.Message.Contains("商家已设置该商品仅指定作者可推广"))
{
e.SendMessage(Class1.Config.SearchNoCommissionTip);//未搜索到提示语
db.UpdateRecord(memberTmp.id);
var shared = new Dictionary<string, object>();
shared["msg_type"] = "查询宝贝";
shared["cps_type"] = CpsType.;
shared["msg_username"] = memberTmp.username;
shared["price"] = "未知";
shared["title"] = message;
shared["coupon_price"] = "未知";
shared["user_point"] = "未知";
shared["economize"] = "未知";
var sharedEvent = new SharedEvents(shared);
EventClient.OnEvent(sender, sharedEvent);
}
else if (ex.Message.Contains("转链异常") || ex.Message.Contains("当前商品暂不支持站外分享"))
{
e.SendMessage(Class1.Config.SearchNoCommissionTip);//未搜索到提示语
throw ex;
}
else
throw ex;
}
#endregion
}
catch (Exception ex)
{
if (ex.Message.Contains("商品不存在") || ex.Message.Contains("商品未推广") || ex.Message.Contains("商家已设置该商品仅指定作者可推广"))
{
e.SendMessage(Class1.Config.SearchNoCommissionTip);//未搜索到提示语
ApiClient.GetSession().UpdateRecord(memberTmp.id);
var shared = new Dictionary<string, object>();
shared["msg_type"] = "查询宝贝";
shared["cps_type"] = CpsType.;
shared["msg_username"] = memberTmp.username;
shared["price"] = "未知";
shared["title"] = "未知";
shared["coupon_price"] = "未知";
shared["user_point"] = "未知";
shared["economize"] = "未知";
var sharedEvent = new SharedEvents(shared);
EventClient.OnEvent(sender, sharedEvent);
return true;
}
if (ex.Message.StartsWith("@"))
plugin.OnLog($"W ({e.RobotInfo.nick}【{e.RobotInfo.name}】){ex.Message.Replace("@", "")}");
else
plugin.OnLog($"W({e.RobotInfo.nick}【{e.RobotInfo.name}】){ex.Message} - {ex.StackTrace}");
plugin.OnLog(ApiClient.Setting.SystemConfig.msg_error);
}
return false;
}
}
}