Browse Source

Написал функции для создания, удаления пользователей из БД, привзяки кошельков в пользователям. #EBT-6
Дополнил класс работы с БД #EBT-5

Veloe 4 years ago
parent
commit
1591d4e618

+ 7 - 8
EthermineBotTelegram/App.config

@@ -2,20 +2,19 @@
 <configuration>
   <configSections>
         <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
-        <section name="entityFramework"
-          type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
-          requirePermission="false"/>
+        <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
     </configSections>
     <startup> 
-        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/>
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
     </startup>
     <appSettings>
-        <add key="poolApiUrl" value="https://api.ethermine.org"/>
-        <add key="dbIp" value="192.168.2.2"/>
+        <add key="poolApiUrl" value="https://api.ethermine.org" />
+        <add key="dbIp" value="192.168.2.2" />
     </appSettings>
     <entityFramework>
         <providers>
-            <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
-        </providers>
+            <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
+        <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Version=8.0.24.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
+      </provider></providers>
     </entityFramework>
 </configuration>

+ 13 - 3
EthermineBotTelegram/EFDatabase.cs

@@ -1,12 +1,16 @@
 using System.Data.Common;
 using System.Data.Entity;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using MySql.Data.EntityFramework;
 
 namespace EFDatabase
 {
+    [DbConfigurationType(typeof(MySqlEFConfiguration))]
     public class botdb : DbContext
     {
         public botdb(string connectionStringToDB)
-            : base(connectionStringToDB)
+            : base(connectionStringToDB) 
         { }
         
         public DbSet<users> users { get; set; }
@@ -14,10 +18,12 @@ namespace EFDatabase
         public DbSet<workers> workers { get; set; }
 
     }
-
+    
     public class users
     {
-        public int chat_id { get; set; }
+        [Key]
+        [DatabaseGenerated(DatabaseGeneratedOption.None)]
+        public long chat_id { get; set; }
         public string wallet { get; set; }
         public long last_message { get; set; }
         public long timer { get; set; } //unused
@@ -25,6 +31,8 @@ namespace EFDatabase
 
     public class miners
     {
+        [Key]
+        [DatabaseGenerated(DatabaseGeneratedOption.None)]
         public string wallet { get; set; }
         public long time { get; set; }
         public long reported_hashrate { get; set; }
@@ -38,6 +46,8 @@ namespace EFDatabase
 
     public class workers
     {
+        [Key]
+        [DatabaseGenerated(DatabaseGeneratedOption.None)]
         public string wallet { get; set; }
         public long time { get; set; }
         public string worker { get; set; }

+ 59 - 0
EthermineBotTelegram/EthermineBotTelegram.csproj

@@ -34,6 +34,10 @@
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="BouncyCastle.Crypto, Version=1.8.5.0, Culture=neutral, PublicKeyToken=0e99375e54769942">
+      <HintPath>..\packages\BouncyCastle.1.8.5\lib\BouncyCastle.Crypto.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
     <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
       <HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.dll</HintPath>
       <Private>True</Private>
@@ -42,14 +46,61 @@
       <HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.SqlServer.dll</HintPath>
       <Private>True</Private>
     </Reference>
+    <Reference Include="Google.Protobuf, Version=3.14.0.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604">
+      <HintPath>..\packages\Google.Protobuf.3.14.0\lib\net45\Google.Protobuf.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="K4os.Compression.LZ4, Version=1.1.11.0, Culture=neutral, PublicKeyToken=2186fa9121ef231d">
+      <HintPath>..\packages\K4os.Compression.LZ4.1.1.11\lib\net46\K4os.Compression.LZ4.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="K4os.Compression.LZ4.Streams, Version=1.1.11.0, Culture=neutral, PublicKeyToken=2186fa9121ef231d">
+      <HintPath>..\packages\K4os.Compression.LZ4.Streams.1.1.11\lib\net46\K4os.Compression.LZ4.Streams.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="K4os.Hash.xxHash, Version=1.0.6.0, Culture=neutral, PublicKeyToken=32cd54395057cec3">
+      <HintPath>..\packages\K4os.Hash.xxHash.1.0.6\lib\net46\K4os.Hash.xxHash.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="mscorlib" />
+    <Reference Include="MySql.Data, Version=8.0.24.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
+      <HintPath>..\packages\MySql.Data.8.0.24\lib\net452\MySql.Data.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="MySql.Data.EntityFramework, Version=8.0.24.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
+      <HintPath>..\packages\MySql.Data.EntityFramework.8.0.24\lib\net452\MySql.Data.EntityFramework.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
     <Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed">
       <HintPath>..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
       <Private>True</Private>
     </Reference>
     <Reference Include="System" />
+    <Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51">
+      <HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.ComponentModel" />
     <Reference Include="System.ComponentModel.DataAnnotations" />
     <Reference Include="System.Configuration" />
+    <Reference Include="System.Configuration.Install" />
     <Reference Include="System.Core" />
+    <Reference Include="System.Management" />
+    <Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51">
+      <HintPath>..\packages\System.Memory.4.5.3\lib\netstandard2.0\System.Memory.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Numerics" />
+    <Reference Include="System.Numerics.Vectors, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+      <HintPath>..\packages\System.Numerics.Vectors.4.4.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+      <HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Security" />
+    <Reference Include="System.Transactions" />
     <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Data.DataSetExtensions" />
     <Reference Include="Microsoft.CSharp" />
@@ -60,6 +111,14 @@
       <HintPath>..\packages\Telegram.Bot.15.7.1\lib\net45\Telegram.Bot.dll</HintPath>
       <Private>True</Private>
     </Reference>
+    <Reference Include="Ubiety.Dns.Core, Version=2.2.1.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
+      <HintPath>..\packages\MySql.Data.8.0.24\lib\net452\Ubiety.Dns.Core.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="Zstandard.Net, Version=1.1.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
+      <HintPath>..\packages\MySql.Data.8.0.24\lib\net452\Zstandard.Net.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
   </ItemGroup>
   <ItemGroup>
     <Compile Include="AppSettings.cs" />

+ 88 - 4
EthermineBotTelegram/Program.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using System.Configuration;
+using System.Data.Entity;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -10,13 +11,15 @@ using Telegram.Bot.Types;
 using Telegram.Bot.Types.Enums;
 using Newtonsoft.Json;
 using System.Net;
+using EFDatabase;
+using MySql.Data.MySqlClient;
 
 namespace EthermineBotTelegram
 {
     class  Program
     {
         static ITelegramBotClient botClient;
-        
+        static EFDatabase.botdb Botdb;
         static void Main(string[] args)
         {
             botClient = new TelegramBotClient("1785154817:AAGhXD9yQVn9HPdWTcmGJUBeZ8nA50SzHbY");
@@ -26,6 +29,21 @@ namespace EthermineBotTelegram
             );
             
             //here will be enstablishing connection to DB
+            string user = Console.ReadLine();
+            string pass = Console.ReadLine();
+
+            Botdb =
+                new botdb("server=" + AppSettings.dbIp +  ";port=3306;database=botdb;uid=" + user + "; pwd=" + pass);
+
+            try
+            {
+                Botdb.Database.Connection.Open();
+                Botdb.Database.Connection.Close();
+            }
+            catch(MySqlException)
+            {
+                Console.WriteLine("Don't connected! Check auth data and restart!");
+            }
             
             //ask for username and password for db
 
@@ -52,12 +70,17 @@ namespace EthermineBotTelegram
                     {
                         // add user into database
                         case "/start":
-                            //await AddUser(e.Message.Chat);
+                            AddUser(e.Message.Chat);
                             break;
-        
+                    
+                        // add user into database
+                        case "/stop":
+                            DeleteUser(e.Message.Chat);
+                            break;
+                        
                         // connect wallet to user
                         case "/setwallet":
-                            //await SetWallet(message);
+                            SetWallet(e);
                             break;
 
                         // get actual data from ethermine
@@ -105,6 +128,67 @@ namespace EthermineBotTelegram
                     text:   "Something got wrong! Check entered wallet or try later.");
             }
         }
+
+        static async void AddUser(Chat e)
+        {
+            if (Botdb.users.Where(users => users.chat_id == e.Id).FirstOrDefault() == null)
+            {
+                var newuser = new users();
+                newuser.chat_id = e.Id;
+                Botdb.users.Add(newuser);
+                Botdb.SaveChanges();
+                await botClient.SendTextMessageAsync(
+                    chatId: e,
+                    text:   "Added new user to database. Now you can connect your miner wallet using command /setwallet <address>");
+            }
+            else
+            {
+                await botClient.SendTextMessageAsync(
+                    chatId: e,
+                    text:   "Already registered");
+            
+            }
+        }
+
+        static async void SetWallet(MessageEventArgs e)
+        {
+            if (Botdb.users.Where(u => u.chat_id == e.Message.Chat.Id).FirstOrDefault() != null)
+            {
+                Botdb.users.Where(u => u.chat_id == e.Message.Chat.Id).FirstOrDefault().wallet =
+                    e.Message.Text.Split(' ')[1];
+                Botdb.SaveChanges();
+                await botClient.SendTextMessageAsync(
+                    chatId: e.Message.Chat,
+                    text:   "Wallet set!");
+            }
+            else
+            {
+                await botClient.SendTextMessageAsync(
+                    chatId: e.Message.Chat,
+                    text:   "You not registered! Type /start first!");
+            }
+        }
+
+        static async void DeleteUser(Chat e)
+        {
+            if (Botdb.users.Where(users => users.chat_id == e.Id).FirstOrDefault() != null)
+            {
+                var deletableWallet = Botdb.users.Where(u => u.chat_id == e.Id).First().wallet;
+                Botdb.workers.RemoveRange(Botdb.workers.Where(w=> w.wallet == deletableWallet));
+                Botdb.miners.RemoveRange(Botdb.miners.Where(m=> m.wallet == deletableWallet));
+                Botdb.users.RemoveRange(Botdb.users.Where(u=> u.chat_id == e.Id));
+                Botdb.SaveChanges();
+                await botClient.SendTextMessageAsync(
+                    chatId: e,
+                    text:   "Done!");
+            }
+            else
+            {
+                await botClient.SendTextMessageAsync(
+                    chatId: e,
+                    text:   "Already deleted");
+            }
+        }
         private static T _download_serialized_json_data<T>(string url) where T : new() {
             using (var w = new WebClient()) {
                 var jsonData = string.Empty;

+ 11 - 0
EthermineBotTelegram/packages.config

@@ -1,7 +1,18 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
+  <package id="BouncyCastle" version="1.8.5" targetFramework="net472" />
   <package id="EntityFramework" version="6.4.4" targetFramework="net472" />
+  <package id="Google.Protobuf" version="3.14.0" targetFramework="net472" />
+  <package id="K4os.Compression.LZ4" version="1.1.11" targetFramework="net472" />
+  <package id="K4os.Compression.LZ4.Streams" version="1.1.11" targetFramework="net472" />
+  <package id="K4os.Hash.xxHash" version="1.0.6" targetFramework="net472" />
+  <package id="MySql.Data" version="8.0.24" targetFramework="net472" />
+  <package id="MySql.Data.EntityFramework" version="8.0.24" targetFramework="net472" />
   <package id="Newtonsoft.Json" version="11.0.2" targetFramework="net472" />
+  <package id="System.Buffers" version="4.5.1" targetFramework="net472" />
+  <package id="System.Memory" version="4.5.3" targetFramework="net472" />
   <package id="System.Net.Requests" version="4.3.0" targetFramework="net472" />
+  <package id="System.Numerics.Vectors" version="4.4.0" targetFramework="net472" />
+  <package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net472" />
   <package id="Telegram.Bot" version="15.7.1" targetFramework="net472" />
 </packages>