old_flsystem/应用/VideoFission/Class1.cs

517 lines
28 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

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.Model;
using Api.Framework.SDK;
using Api.Framework.Tools;
using Chat.Framework;
using Chat.Framework.WXSdk.Implement;
using CsharpHttpHelper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using VideoFission.Entitys;
using VideoFission.Properties;
namespace VideoFission
{
public class Class1 : Plugin
{
public Class1()
{
this.Logo = Resources.;
this.Name = Resources.PluginName;
this.Note = Resources.PluginNote;
}
#region
public static Config Config;
private MainForm mainForm = null;
#endregion
public override void Start()
{
try
{
var session = ApiClient.GetSession();
#region
if (!session.TableExist<fl_plugin_videofission_recorded_info>())
session.CreateTable<fl_plugin_videofission_recorded_info>();
else
{
if (!session.ColumnExist("fl_plugin_videofission_recorded_info", "record"))
session.AddColumn("fl_plugin_videofission_recorded_info", "record", "varchar(255)");
}
if (!session.TableExist<fl_plugin_videofission_rule_info>())
{
session.CreateTable<fl_plugin_videofission_rule_info>();
session.AddUnique<fl_plugin_videofission_rule_info>("ruletype", "amount");
session.Insertable(new List<fl_plugin_videofission_rule_info>(){
new fl_plugin_videofission_rule_info() { ruletype = RuleType.,amount = 5,num = 5},
new fl_plugin_videofission_rule_info() { ruletype = RuleType.,amount = 15,num = 20},
new fl_plugin_videofission_rule_info() { ruletype = RuleType.,amount = 99999,num = 30},
new fl_plugin_videofission_rule_info() { ruletype = RuleType.,amount = 5,num = 5},
new fl_plugin_videofission_rule_info() { ruletype = RuleType.,amount = 15,num = 20},
new fl_plugin_videofission_rule_info() { ruletype = RuleType.,amount = 99999,num =30},
new fl_plugin_videofission_rule_info() { ruletype = RuleType.,amount = 5,num = 5},
new fl_plugin_videofission_rule_info() { ruletype = RuleType.,amount = 50,num = 20},
new fl_plugin_videofission_rule_info() { ruletype = RuleType.,amount = 99999,num = 30},
}).ExecuteCommand();
}
#endregion
//创建配置文件
Config = this.ReadConfig<Config>();
SDK.WXNewFriendEvent += SDK_WXNewFriendEvent;
SDK.OrderNoticeEvent += SDK_OrderNoticeEvent;
SDK.ReciveIMEvent += SDK_ReciveIMEvent;
}
catch (Exception ex)
{
this.OnLog(ex.Message);
}
}
public override void ShowForm()
{
try
{
if (mainForm == null || mainForm.IsDisposed)
{
mainForm = new MainForm();
mainForm.Show();
}
mainForm.TopMost = true;
mainForm.TopMost = false;
}
catch (Exception ex)
{
this.OnLog(ex.Message);
}
}
public override void Stop()
{
try
{
if (mainForm != null)
{
mainForm.CloseForm();
mainForm = null;
}
}
catch (Exception ex)
{
this.OnLog(ex.Message);
}
}
/// <summary>
/// 订单通知接口
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SDK_OrderNoticeEvent(object sender, Api.Framework.Events.OrderNoticeEvent e)
{
try
{
if (e.Customer == null && e.Member != null)
{
if (Config.OnOff)
{
var session = ApiClient.GetSession();
var wx = ChatClient.WXClient.FirstOrDefault(f => f.Key == e.Member.robot_name).Value;
if (wx != null /*&& wx.WeixinType == WeixinType.Grpc微信*/ && wx.Status == Chat.Framework.WXSdk.WxStatus.线)
{
//var ipad = wx as WXClientImpl_IPAD;
//if (ipad == null) return;
var systemOrderStatus = -1;
if (e.Order is fl_order_alimama)
systemOrderStatus = (int)(e.Order as fl_order_alimama).db_status;
if (e.Order is fl_order_pinduoduo)
systemOrderStatus = (int)(e.Order as fl_order_pinduoduo).db_status;
if (e.Order is fl_order_jingdong)
systemOrderStatus = (int)(e.Order as fl_order_jingdong).db_status;
if (systemOrderStatus == 1002 || systemOrderStatus == 998 || systemOrderStatus == 999 || systemOrderStatus == 1003)
{
_ProcessStr(username: e.Member.username);
}
}
}
}
}
catch (Exception ex)
{
this.OnLog($"{ex.Message} - {ex.StackTrace}");
}
}
/// <summary>
/// 新加好友
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SDK_WXNewFriendEvent(object sender, Chat.Framework.WXSdk.Events.WXNewFriend e)
{
try
{
if (Config.OnOff)
_ProcessStr(username: e.Friend.UserName);
}
catch (Exception ex)
{
this.OnLog($"{ex.Message} . {ex.StackTrace}");
}
}
/// <summary>
///
/// </summary>
/// <param name="username">用户wxid</param>
/// <returns></returns>
private void _ProcessStr(string username = "", long uid = 0)
{
try
{
var session = ApiClient.GetSession();
fl_member_info member = null;
if (!string.IsNullOrWhiteSpace(username))
member = session.Find<fl_member_info>("select * from fl_member_info where username = @username", new { username = username }).FirstOrDefault();
else if (uid != 0)
member = session.Find<fl_member_info>("select * from fl_member_info where id = @id", new { id = uid }).FirstOrDefault();
if (member == null)
return;
var days = (DateTime.Now.Date - member.crt_time.Date).Days;
#region //(3)/退(3)
decimal invite_amount = 0m;//推荐人数
decimal order_amount = 0m;//完成订单数
var incomeResult = session.FindTable(@"select count(id) as num from fl_member_info where inviter_id = @userid
UNION ALL
select COALESCE(sum(item_num),0) as num from fl_order_alimama where db_userid = @userid and db_status not in (1006,1004)
UNION ALL
select COALESCE(sum(skuNum),0) as num from fl_order_jingdong where db_userid = @userid and db_status not in (1006,1004)
UNION ALL
select COALESCE(sum(goods_quantity),0) as num from fl_order_pinduoduo where db_userid = @userid and db_status not in (1006,1004) ", new { userid = member.id });
if (incomeResult.Rows.Count != 0)
{
invite_amount = decimal.Parse(incomeResult.Rows[0]["num"].ToString());
order_amount = decimal.Parse(incomeResult.Rows[1]["num"].ToString()) + decimal.Parse(incomeResult.Rows[2]["num"].ToString()) + decimal.Parse(incomeResult.Rows[3]["num"].ToString());
}
#endregion
//查询次数/推荐人数/完成订单数/退款数量
var ruleInvite = session.FindSignInfo(RuleType., (long)invite_amount);
var ruleOrder = session.FindSignInfo(RuleType., (long)order_amount);
var ruleDays = session.FindSignInfo(RuleType., days);
var recorded_info = session.Find<fl_plugin_videofission_recorded_info>("select * from fl_plugin_videofission_recorded_info where uid = @uid", new { uid = member.id }).FirstOrDefault();
if (recorded_info != null)
{
int num = 0;
AwardItem item = null;
if (recorded_info.record == null)
item = new AwardItem();
else
item = HttpExtend.JsonToDictionary(recorded_info.record).ConvertToObj<AwardItem>();
if (ruleInvite != null)
{
if (item.ruleInviteId != ruleInvite.id)
{
item.ruleInviteId = ruleInvite.id;
num += (int)ruleInvite.num;
}
}
if (ruleOrder != null)
{
if (item.ruleOrderId != ruleOrder.id)
{
item.ruleOrderId = ruleOrder.id;
num += (int)ruleOrder.num;
}
}
if (ruleDays != null)
{
if (item.ruleDaysId != ruleDays.id)
{
item.ruleDaysId = ruleDays.id;
num += (int)ruleDays.num;
}
}
if (num != 0)
{
recorded_info.surplus += num;
recorded_info.record = HttpHelper.ObjectToJson(item);
session.Saveable(recorded_info).ExecuteCommand();
var robot = session.FindRobotInfo(member.robot_name, member.robot_type);
if (robot == null) return;
ApiClient.SendMessage(robot, member.username, Config.ParsingTimesIncreaseSuccess.Replace("[剩余次数]", recorded_info.surplus.ToString()).Replace("[增加次数]", num.ToString()));
}
}
}
catch (Exception ex)
{ }
}
/// <summary>
/// 通用解析
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SDK_ReciveIMEvent(object sender, ReciveIMEvent e)
{
try
{
#region
if (Config.Custom_OnOff && !string.IsNullOrWhiteSpace(Config.Custom_SearchCMD) && !string.IsNullOrWhiteSpace(Config.Custom_SearchUrl) && !string.IsNullOrWhiteSpace(Config.Custom_SearchMess))
{
var reg = Regex.Match(e.Message.Trim(), Config.Custom_SearchCMD);
if (reg.Success)
{
var vname = reg.Groups[1].Value.Trim();
if (!string.IsNullOrWhiteSpace(vname))
{
var vmess = Config.Custom_SearchMess.Replace("[电影名]", vname).Replace("[电影网址]",
ApiClient.ShortURL(Config.Custom_SearchUrl.Replace("[电影名]", HttpExtend.UrlEncode(vname)), Config.Custom_SearchShortLinkWay).Result
);
e.SendMessage(vmess);
return;
}
}
}
#endregion
#region
var url = e.Message;
if (e.Message.Contains("<appmsg appid="))
{
var regex = Regex.Match(e.Message, "<url>(?<链接>.*?)</url>");
if (regex.Success)
{
url = regex.Groups["链接"].Value;
}
}
fl_plugin_videofission_recorded_info recorded_info = null;
var urlTmp = HttpExtend.RegexMatchUrl(url);
if (!string.IsNullOrWhiteSpace(urlTmp))
{
var _url = Regex.Match(urlTmp, @"(?<url>(http[s]?://m.v.qq.com)|(http[s]?://m.iqiyi.com)|(http[s]?://v.qq.com/x/page)|(http[s]?://v.qq.com/x/cover)|(http[s]?://www.iqiyi.com/(.*?).html)|(http[s]?://www.le.com/ptv/vplay/(.*?).html)|(http[s]?://www.fun.tv/vplay)|(http[s]?://v.youku.com/v_show/id_)|(http[s]?://www.mgtv.com/(.+?).html)|(mgtv.com/(.+?).html)|(http[s]?://tv.sohu.com/)|(http[s]?://film.sohu.com/album)|(http[s]?://v.pptv.com/show/)|(http[s]?://www.wasu.cn/Play/show/id/)|(http[s]?://new-play.tu dou.com/v/)|(www.youku.com\?sharekey))", RegexOptions.IgnoreCase);
if (_url.Success)
{
if (Config._Unlimited == Api.Framework.Enums.SwitchType.)//没有开启无限制
{
//查询用户的信息
var session = ApiClient.GetSession();
recorded_info = session.Find<fl_plugin_videofission_recorded_info>($"select * from fl_plugin_videofission_recorded_info where uid = '{e.GetMemberinfo().id}'").FirstOrDefault();
if (recorded_info == null && Config._Experience == Api.Framework.Enums.SwitchType.)//用户为新用户,并且新用户免费多少次开着
{
recorded_info = new fl_plugin_videofission_recorded_info() { uid = e.GetMemberinfo().id, surplus = Config.ExperienceCount };
session.Insertable<fl_plugin_videofission_recorded_info>(recorded_info).ExecuteReturnEntity();
}
if (recorded_info.surplus > 0)
{
recorded_info.surplus = recorded_info.surplus - 1;
e.SendMessage(Config.LinkResolvedSuccessfully.Replace("[剩余次数]", recorded_info.surplus.ToString()).Replace("[播放链接]", ApiClient.ShortURL(Tools.FindAnalysisUrlFulfill(urlTmp), Config.ShortLinkWay).Result));
session.Updateable(recorded_info).ExecuteCommand();
}
else//播放次数不足够时
e.SendMessage(Config.PromptOfInsufficientBalance.Replace("[剩余次数]", recorded_info.surplus.ToString()));
}
else
e.SendMessage(Config.LinkResolvedSuccessfully_Unlimited.Replace("[播放链接]", ApiClient.ShortURL(Tools.FindAnalysisUrlFulfill(urlTmp), Config.ShortLinkWay).Result));
}
}
if (!string.IsNullOrWhiteSpace(Config._SearchCMD))
{
var reg = Regex.Match(e.Message.Trim(), Config._SearchCMD);
if (reg.Success)
{
var num = reg.Groups["集数"].ToString();
HttpHelper http = new HttpHelper();
HttpItem item = new HttpItem()
{
URL = "http://www.okzyw.com/index.php?m=vod-search",
Method = "post",
Referer = "http://www.okzyw.com/?m=vod-type-id-1.html",
Postdata = $"wd={HttpExtend.UrlEncode(reg.Groups[""].ToString())}&submit=search",
ContentType = "application/x-www-form-urlencoded"
};
HttpResult result = http.GetHtml(item);
string html = result.Html;
if (html.Contains("共0条数据"))
{
e.SendMessage(Config.SearchResolvedUnSuccessfully.Replace("[电影名]", reg.Groups["电影名"].ToString()));
return;
}
var regs = Regex.Matches(html, @"<li><span class=\""tt\""></span><span class=\""xing_vb4\""><a href=\""(?<跳转地址>.+?)\"" target=\""_blank\"">(?<节目名称>.+?)</a></span> <span class=\""xing_vb5\"">(?<节目类型>.+?)</span> <span class=\""xing_vb6\"">(?<时间>.+?)</span></li>");
//var regs = Regex.Matches(html, @"<td class=\""l\""><a href=\""(?<跳转地址>.+?)\"" target=\""_blank\"">(?<节目名称>.+?)<font color=\""red\"">(?:[^<]+?)</font>\s*<td><a href=\""(?:[^""]+?)\"" target=\""_blank\"">(?<节目类型>.+?)</a></td>(?:.+?)(?:[\w\W]+?)<font color=\""(?:[^""]+?)\"">(?<时间>.+?)</font></td>");
foreach (Match reg_ in regs)
{
var skipUrl = reg_.Groups["跳转地址"].ToString();
var name = reg_.Groups["节目名称"].ToString();
var type = reg_.Groups["节目类型"].ToString();
var dateTime = reg_.Groups["时间"].ToString();
http = new HttpHelper();
item = new HttpItem()
{
URL = "http://www.okzyw.com" + skipUrl,
Method = "get",
Cookie = "",
Referer = "",
Postdata = "",
Timeout = 100000,
ReadWriteTimeout = 30000,
UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0",
ContentType = "text/html",
Allowautoredirect = false,
ProxyIp = "",
Host = "www.okzyw.com",
};
result = http.GetHtml(item);
html = result.Html;
string movieImage = string.Empty;
reg = Regex.Match(html, @"<img class=""lazy"" src=""(?<电影图片>.+?)"" alt="".+?"" />");
//reg = Regex.Match(html, @"<div class=\""videoPic\"">(?:.*?)<img src=\""(?<电影图片>.+?)\""/>");
if (reg.Success)
{
movieImage = reg.Groups["电影图片"].ToString();
}
reg = Regex.Match(html, @"<h3>播放类型:<span class=""suf"">kuyun</span></h3> (?<所有链接地址>[\w\W]+?)</ul>");
//reg = Regex.Match(html, @"<div class=\""movievod\""><ul>\s*(?<所有链接地址>[\w\W]+?)</ul>");
if (reg.Success)
{
var session = ApiClient.GetSession();
if (recorded_info == null)
{
recorded_info = session.Find<fl_plugin_videofission_recorded_info>($"select * from fl_plugin_videofission_recorded_info where uid = '{e.GetMemberinfo().id}'").FirstOrDefault();
if (recorded_info == null && Config._Experience == Api.Framework.Enums.SwitchType.)//用户为新用户,并且新用户免费多少次开着
{
recorded_info = new fl_plugin_videofission_recorded_info() { uid = e.GetMemberinfo().id, surplus = Config.ExperienceCount };
session.Insertable<fl_plugin_videofission_recorded_info>(recorded_info).ExecuteReturnEntity();
}
}
if (Config._Unlimited == Api.Framework.Enums.SwitchType. && recorded_info == null) return;//没有开启无限制
var urls = reg.Groups["所有链接地址"].ToString();
regs = Regex.Matches(urls, @"<li><input type=""checkbox"" name=""copy_sel"" value=""(?<播放链接>.+?)"" checked="""" />(?<集>.+?)\$(?:.+?)</li>");
//regs = Regex.Matches(urls, @"<li><input type=\""checkbox\"" name=\""copy_sel\"" value=\""(?<集>.+?)\$(?<播放链接>.+?)\"" checked=\""\"">");
var list = new Dictionary<string, string>();
foreach (Match reg1_ in regs)
{
var broadcast_address = reg1_.Groups["播放链接"].ToString();
var ji = reg1_.Groups["集"].ToString();
if (!type.EndsWith("剧"))
{
list.Add(ji, broadcast_address);
break;
}
if (!list.ContainsKey(ji.Replace("第", "").Replace("集", "")))
list.Add(ji.Replace("第", "").Replace("集", ""), broadcast_address);
}
string mess = string.Empty;
if (list.Count != 0)
{
if (Config._Unlimited == Api.Framework.Enums.SwitchType.)//没有开启无限制
{
if (recorded_info.surplus <= 0)//播放次数不足够时
{
e.SendMessage(Config.PromptOfInsufficientBalance.Replace("[剩余次数]", recorded_info.surplus.ToString()));
return;
}
}
if (list.Count == 1)
{
if (Config._Unlimited == Api.Framework.Enums.SwitchType.)//没有开启无限制
{
recorded_info.surplus = recorded_info.surplus - 1;
}
if (recorded_info == null)//用户为新用户,并且新用户免费多少次开着
{
recorded_info = new fl_plugin_videofission_recorded_info() { uid = e.GetMemberinfo().id, surplus = Config.ExperienceCount };
session.Insertable<fl_plugin_videofission_recorded_info>(recorded_info).ExecuteReturnEntity();
}
else
{
if (Config._Unlimited == Api.Framework.Enums.SwitchType.)
{
recorded_info.surplus--;
session.Updateable(recorded_info).ExecuteCommand();
}
}
//[电影图片]、[电影名]、[集数]、[播放链接]、[剩余次数]
mess = Config.SearchResolvedSuccessfully.Replace("[电影名]", name).Replace("[集数]", string.IsNullOrWhiteSpace(num) ? list.Keys.First() : num).Replace("[播放链接]", ApiClient.ShortURL(list.Values.First(), Config.ShortLinkWay).Result).Replace("[剩余次数]", recorded_info.surplus.ToString()).Replace("[电影图片]", $"[图片={movieImage}]"); ;
}
else
{
if (!string.IsNullOrWhiteSpace(num))
{
num = num.Length == 1 ? "0" + num : num;//单数需要显示 0X 格式
if (list.ContainsKey(num))
{
if (Config._Unlimited == Api.Framework.Enums.SwitchType.)//没有开启无限制
{
recorded_info.surplus = recorded_info.surplus - 1;
}
//[电影图片]、[电影名]、[集数]、[播放链接]、[剩余次数]
mess = Config.SearchResolvedSuccessfully.Replace("[电影名]", name).Replace("[集数]", num).Replace("[播放链接]", ApiClient.ShortURL(list[num], Config.ShortLinkWay).Result).Replace("[剩余次数]", recorded_info.surplus.ToString()).Replace("[电影图片]", $"[图片={movieImage}]");
}
else
mess = Config.SearchteleplayResolvedUnSuccessfully.Replace("[电影名]", name).Replace("[集数]", num);
}
else//用户没有输入集数,返回第一个
{
if (Config._Unlimited == Api.Framework.Enums.SwitchType.)//没有开启无限制
{
recorded_info.surplus = recorded_info.surplus - 1;
}
//[电影图片]、[电影名]、[集数]、[播放链接]、[剩余次数]
mess = Config.SearchResolvedSuccessfully.Replace("[电影名]", name).Replace("[集数]", string.IsNullOrWhiteSpace(num) ? list.Keys.First() : num).Replace("[播放链接]", ApiClient.ShortURL(list.Values.First(), Config.ShortLinkWay).Result).Replace("[剩余次数]", recorded_info.surplus.ToString()).Replace("[电影图片]", $"[图片={movieImage}]");
}
}
if (Config._Unlimited == Api.Framework.Enums.SwitchType.)//没有开启无限制
{
session.Updateable(recorded_info).ExecuteCommand();
}
}
else
{
mess = Config.SearchResolvedUnSuccessfully.Replace("[电影名]", name);
}
if (!string.IsNullOrWhiteSpace(mess))
e.SendMessage(mess);
}
break;
}
}
}
#endregion
}
catch (Exception ex)
{
this.OnLog(ex.Message + ex.StackTrace);
}
}
}
}