소스 검색

加入 readme

0x0001F36D 5 년 전
부모
커밋
340e20ab48
5개의 변경된 파일28개의 추가작업 그리고 222개의 파일을 삭제
  1. 5 0
      doc/plugins.md
  2. 20 0
      readme.md
  3. 1 0
      src/Yuuna.Contracts.Test/Yuuna.Contracts.Test.csproj
  4. 1 222
      src/Yuuna/EntryPoint.cs
  5. 1 0
      src/Yuuna/Yuuna.csproj

+ 5 - 0
doc/plugins.md

@@ -0,0 +1,5 @@
+# 模組開發
+1. 在專案中引用 ```Yuuna.Contracts.dll```,裡面有大部分開發時你所需要的類別,除非你需要一些特殊的功能(像是序列化之類的)
+    ,這時你可以考慮引用 ```Yuuna.Common.dll``` 這個函式庫。
+2. 我在設計模組及其類別介面時,為開發者提供了建構者模式(Builder Pattern),逐一引導開發者建構模組行為,未來有需要我會考慮導入 IoC 及 Config (這部分我會優先處理)。
+3. 可以直接參考 Yuuna.Contracts.Test 這個專案中我對模組的實作方式。

+ 20 - 0
readme.md

@@ -0,0 +1,20 @@
+# Yuuna
+
+## 功能整合願望清單
+> 以下大部分功能都需要個人用戶的帳號、密碼及 API (大部分都是逆向工程出來的版本)
+- Telegram 訊息、語音通話支援
+    > 目前研究是 訊息 部分可以整合,語音通話部分還沒找到 API。
+- Line 訊息、語音通話支援
+    > Line 的非官方(透過逆向工程得到) API 在使用上非常非常難開發,
+    > 有大量文件及我個人及前輩測試發現很容易有封鎖的可能,
+    > 尤其是語音通話這部分。
+- IoT 控制 (MQTT)
+    > 以前開發過,這部分問題比較少。
+- Uber Eats 訂餐
+    > 還沒研究,原本想串 Food Panad 不過沒有找到逆向出來的 API 能參考,Uber Eats 是已經有找到相對應的非官方 API 了。
+- 備忘錄
+    > 我個人都用 Any.do (也無官方API)。
+- Trello
+    > 上面大部分跑過後才會考慮加入這部分的整合功能。
+- Uber
+    > 上面大部分跑過後才會考慮加入這部分的整合功能。

+ 1 - 0
src/Yuuna.Contracts.Test/Yuuna.Contracts.Test.csproj

@@ -5,6 +5,7 @@
     <TargetFramework>netcoreapp3.0</TargetFramework>
     <ApplicationIcon />
     <StartupObject />
+    <UserSecretsId>9a20e10b-0220-492e-bd4c-2ad9189e2e4c</UserSecretsId>
   </PropertyGroup>
 
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

+ 1 - 222
src/Yuuna/EntryPoint.cs

@@ -23,228 +23,7 @@ namespace Yuuna
     { 
         public static async Task Main(string[] args)
         {
-            await WebHost.RunAsync();
-             
-
-            //while (true)
-            //{
-            //    var client = new RestClient("http://api.yuuna-project.com:5000/");
-            //    client.Timeout = -1;
-            //    var request = new RestRequest(Method.POST);
-            //    request.AddHeader("Content-Type", "application/json");
-            //    request.AddParameter("application/json", "{\n    \"text\": \""+Console.ReadLine()+"\"\n}", ParameterType.RequestBody);
-            //    var response = client.Execute(request);
-            //    Console.WriteLine("Bot: " + response.Content);
-            //}
-
-            //var canResponses = new Response[]
-            //{
-            //    (Moods.Sad, "我不清楚你想做什麼 OvQ"),
-            //    (Moods.Sad, "我不懂你想幹嘛 QAQ"),
-            //    (Moods.Sad, "我不知道你想幹嘛 OHQ"),
-            //};
-
-            //var antonyms = new[]
-            //{
-            //    new Antonym("是", "不是"),
-            //    new Antonym("對", "不對"),
-            //    new Antonym("是", "否"), 
-            //};
-
-            //IInteractiveView interactor = new ConsoleBotInteract( );
-            //ITextSegmenter segmenter = new JiebaTextSegmenter();
-            //IStrategy plan = new DefaultStrategy();
-
-            //var allPlugins = ModuleManager.Instance.Modules;
-            //foreach (var item in allPlugins)
-            //{
-            //    item.Initialize(segmenter, new GroupManager());
-            //    Debug.WriteLine("已載入模組: " + item.Type.AssemblyQualifiedName);
-            //}
-
-            //// prepare task completed.
-            //LOOP:
-            //var text = interactor.Accept();
-            //var cutted = segmenter.Cut(text);
-            //Debug.WriteLine($"來自分詞器 {segmenter.Name} 的分詞結果: [ {string.Join(", ", cutted)} ]");
-
-            //var alternative = plan.FindBest(allPlugins.Select(x => x.PatternSet).ToArray(), cutted);
-            //Debug.WriteLine(alternative.Status);
-            //switch (alternative.Status)
-            //{
-            //    // 罐頭回應
-            //    case AlternativeStatus.Invalid:
-            //        interactor.OnReceive(canResponses.RandomTakeOne());
-            //        break;
-
-            //    case AlternativeStatus.Optimal:
-            //        {
-            //            var single = alternative.Matches[0];
-            //            single.Pattern.Owner.Patterns.TryGet(single.Pattern, out var bag);
-            //            var r = bag.Invoke(single);
-            //            interactor.OnReceive(r);
-            //            break;
-            //        }
-
-            //    case AlternativeStatus.Condition:
-            //        {
-            //            var sb = new StringBuilder();
-
-            //            sb.Append("你是想要"); 
-
-            //            foreach (var g in alternative.Matches[0].Pattern.ToImmutable())
-            //            {
-            //                sb.Append(g.RandomTakeOne().RandomTakeOne());
-            //            }
-
-            //            sb.Append("嗎?");
-            //            interactor.OnReceive(sb.ToString());
-
-            //            text = interactor.Accept();
-
-
-
-            //            foreach (var antonym in antonyms)
-            //            {
-            //                if (antonym.Judge(text, out var type))
-            //                {
-            //                    if (type.Equals(Antonym.TypeKinds.Positive))
-            //                    {
-            //                        var single = alternative.Matches[0];
-            //                        single.Pattern.Owner.Patterns.TryGet(single.Pattern, out var bag);
-            //                        var r = bag.Invoke(single);
-            //                        interactor.OnReceive(r);
-            //                        goto Leave;
-            //                    }
-            //                    else
-            //                        break;
-            //                }
-            //            }
-
-            //            interactor.OnReceive(canResponses.RandomTakeOne());
-            //            Leave:
-            //            break;
-            //        }
-
-            //    case AlternativeStatus.Proposition:
-            //        {
-
-            //            var sb = new StringBuilder(); 
-            //            var current = alternative.Matches[0];
-
-            //            sb.Append("你是想要");
-
-            //            foreach (var g in current.Pattern.ToImmutable())
-            //            {
-            //                sb.Append(g.RandomTakeOne().RandomTakeOne());
-            //            }
-
-            //            sb.Append("嗎?");
-            //            interactor.OnReceive(sb.ToString());
-
-            //            text = interactor.Accept(); 
-            //            foreach (var antonym in antonyms)
-            //            {
-            //                if (antonym.Judge(text, out var type))
-            //                {
-            //                    if (type.Equals(Antonym.TypeKinds.Positive))
-            //                    {
-            //                        current.Pattern.Owner.Patterns.TryGet(current.Pattern, out var bag);
-            //                        var r = bag.Invoke(current);
-            //                        interactor.OnReceive(r);
-            //                        goto Leave;
-            //                    }
-            //                    else if(type.Equals(Antonym.TypeKinds.Negative))
-            //                        break;
-            //                }
-            //            }
-
-            //            sb.Clear();
-
-
-            //            current = alternative.Matches[1];
-            //            sb.Append("還是");
-            //            sb.Append("你是想"); 
-
-            //            foreach (var g in current.Pattern.ToImmutable())
-            //            {
-            //                sb.Append(g.RandomTakeOne().RandomTakeOne());
-            //            }
-
-            //            sb.Append("?");
-            //            interactor.OnReceive(sb.ToString());
-
-            //            text = interactor.Accept();
-
-            //            foreach (var antonym in antonyms)
-            //            {
-            //                if (antonym.Judge(text, out var type))
-            //                {
-            //                    if (type.Equals(Antonym.TypeKinds.Positive))
-            //                    {
-            //                        current.Pattern.Owner.Patterns.TryGet(current.Pattern, out var bag);
-            //                        var r = bag.Invoke(current);
-            //                        interactor.OnReceive(r);
-            //                        goto Leave;
-            //                    }
-            //                    else if (type.Equals(Antonym.TypeKinds.Negative))
-            //                        break;
-            //                }
-            //            }
-
-            //            interactor.OnReceive(canResponses.RandomTakeOne()); 
-
-            //            Leave:
-            //            break;
-            //        }
-
-            //    case AlternativeStatus.Paradox:
-
-
-            //        break;
-
-            //    //case AlternativeStatus.NoModuleInstalled:
-            //    //    interactor.OnReceive((Moods.Sad, "無效的模組"));
-            //    //    break;
-
-            //    default:
-            //        throw new InvalidOperationException();
-            //}
-            //goto LOOP;
-
-
-            //try
-            //{Send("開燈");
-            //    var stt = SpeechRecognizer.Create("secret.json");
-            //    stt.RecognizeCompleted += a =>
-            //    {
-            //        if (a.Count > 0)
-            //        {
-            //            Console.WriteLine("## Google 語音: " + a[0].Transcript);
-            //            Send(a[0].Transcript);
-            //        }
-            //    };
-
-            //    Console.WriteLine("## Proof of Concept Ver.");
-            //    Console.WriteLine("可以叫我開關燈或者開關門,其他的我還不會");
-
-            //    Console.WriteLine("按下 Enter 鍵開始錄音,任意鍵離開");
-            //    Loop:
-            //    if(Console.ReadKey().Key == ConsoleKey.Enter)
-            //    { 
-            //        using (stt.Recognize())
-            //        {
-            //            Console.WriteLine("按下 Enter 停止錄音,任意鍵離開"); 
-            //            if(Console.ReadKey().Key == ConsoleKey.Enter)
-            //                goto Loop;
-            //        }
-            //    } 
-            //}
-            //catch (Exception e)
-            //{
-            //    Console.WriteLine(e.Message);
-            //    Console.ReadKey();
-            //} 
+            await WebHost.RunAsync(); 
         }
     }
 }

+ 1 - 0
src/Yuuna/Yuuna.csproj

@@ -11,6 +11,7 @@
 
   <ItemGroup>
     <Folder Include="Interaction\AspNetCore\Mvc\Views\" />
+    <Folder Include="Management\" />
     <Folder Include="Properties\" />
   </ItemGroup>