init
@@ -0,0 +1,23 @@
|
||||
program TTW_Bot_app;
|
||||
|
||||
uses
|
||||
System.StartUpCopy,
|
||||
FMX.Forms,
|
||||
uGeneral in 'uGeneral.pas' {Form1},
|
||||
fSettings in 'fSettings.pas' {frSettings: TFrame},
|
||||
fAI in 'fAI.pas' {frAI: TFrame},
|
||||
fNotify in 'fNotify.pas' {frNotify: TFrame},
|
||||
fAutoActions in 'fAutoActions.pas' {frAutoActions: TFrame},
|
||||
fChatOBS in 'fChatOBS.pas' {frChatOBS: TFrame},
|
||||
fLog in 'fLog.pas' {frLog: TFrame},
|
||||
uRecords in 'uRecords.pas',
|
||||
fCommands in 'fCommands.pas' {frCommands: TFrame},
|
||||
uDataBase in 'uDataBase.pas';
|
||||
|
||||
{$R *.res}
|
||||
|
||||
begin
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TForm1, Form1);
|
||||
Application.Run;
|
||||
end.
|
||||
@@ -0,0 +1,209 @@
|
||||
object frAI: TfrAI
|
||||
Size.Width = 723.000000000000000000
|
||||
Size.Height = 181.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
object btnGetAIDef: TButton
|
||||
Position.X = 313.000000000000000000
|
||||
Position.Y = 148.000000000000000000
|
||||
Size.Width = 149.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 43
|
||||
Text = #1055#1086#1083#1091#1095#1080#1090#1100' GigaChat'
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object edtAIP2: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 40
|
||||
Password = True
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 143.000000000000000000
|
||||
Size.Width = 297.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object edtAIP1: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 37
|
||||
Password = True
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 88.000000000000000000
|
||||
Size.Width = 297.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object edtGPTPrefix: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 42
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 33.000000000000000000
|
||||
Size.Width = 297.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object Label45: TLabel
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 63.000000000000000000
|
||||
TextSettings.Trimming = None
|
||||
Text = 'ClientID'
|
||||
TabOrder = 36
|
||||
end
|
||||
object Label47: TLabel
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 118.000000000000000000
|
||||
Size.Width = 175.000000000000000000
|
||||
Size.Height = 17.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TextSettings.Trimming = None
|
||||
Text = 'Autorization Code'
|
||||
TabOrder = 41
|
||||
end
|
||||
object GroupBox1: TGroupBox
|
||||
Position.X = 313.000000000000000000
|
||||
Position.Y = 8.000000000000000000
|
||||
Size.Width = 145.000000000000000000
|
||||
Size.Height = 132.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Text = #1040#1082#1090#1080#1074#1085#1072#1103' '#1085#1077#1081#1088#1086#1089#1077#1090#1100
|
||||
TabOrder = 44
|
||||
object rbGC: TRadioButton
|
||||
Align = Top
|
||||
Hint = '0'
|
||||
IsChecked = True
|
||||
Margins.Left = 5.000000000000000000
|
||||
Margins.Top = 15.000000000000000000
|
||||
Margins.Right = 5.000000000000000000
|
||||
Margins.Bottom = 5.000000000000000000
|
||||
Position.X = 5.000000000000000000
|
||||
Position.Y = 15.000000000000000000
|
||||
Size.Width = 135.000000000000000000
|
||||
Size.Height = 19.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 40
|
||||
Text = 'GigaChat'
|
||||
end
|
||||
object RBCustom: TRadioButton
|
||||
Align = Top
|
||||
Hint = '3'
|
||||
Margins.Left = 5.000000000000000000
|
||||
Margins.Top = 5.000000000000000000
|
||||
Margins.Right = 5.000000000000000000
|
||||
Margins.Bottom = 5.000000000000000000
|
||||
Position.X = 5.000000000000000000
|
||||
Position.Y = 102.000000000000000000
|
||||
Size.Width = 135.000000000000000000
|
||||
Size.Height = 19.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 39
|
||||
Text = 'Custom'
|
||||
end
|
||||
object rbDS: TRadioButton
|
||||
Align = Top
|
||||
Hint = '1'
|
||||
Margins.Left = 5.000000000000000000
|
||||
Margins.Top = 5.000000000000000000
|
||||
Margins.Right = 5.000000000000000000
|
||||
Margins.Bottom = 5.000000000000000000
|
||||
Position.X = 5.000000000000000000
|
||||
Position.Y = 44.000000000000000000
|
||||
Size.Width = 135.000000000000000000
|
||||
Size.Height = 19.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 38
|
||||
Text = 'DeepSeek'
|
||||
end
|
||||
object rbCG: TRadioButton
|
||||
Align = Top
|
||||
Hint = '2'
|
||||
Margins.Left = 5.000000000000000000
|
||||
Margins.Top = 5.000000000000000000
|
||||
Margins.Right = 5.000000000000000000
|
||||
Margins.Bottom = 5.000000000000000000
|
||||
Position.X = 5.000000000000000000
|
||||
Position.Y = 73.000000000000000000
|
||||
Size.Width = 135.000000000000000000
|
||||
Size.Height = 19.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 37
|
||||
Text = 'ChatGPT'
|
||||
end
|
||||
end
|
||||
object edtAIP3: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 38
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 198.000000000000000000
|
||||
Size.Width = 297.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Visible = False
|
||||
end
|
||||
object Label1: TLabel
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 173.000000000000000000
|
||||
Size.Width = 175.000000000000000000
|
||||
Size.Height = 17.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TextSettings.Trimming = None
|
||||
Text = #1052#1086#1076#1077#1083#1100
|
||||
Visible = False
|
||||
TabOrder = 39
|
||||
end
|
||||
object Label2: TLabel
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 8.000000000000000000
|
||||
Size.Width = 297.000000000000000000
|
||||
Size.Height = 17.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Text = #1060#1088#1072#1079#1072' '#1087#1077#1088#1077#1076' '#1089#1086#1086#1073#1097#1077#1085#1080#1077#1084' '#1087#1086#1083#1100#1079#1086#1074#1072#1090#1077#1083#1103
|
||||
TabOrder = 45
|
||||
end
|
||||
object cbOllama: TCheckBox
|
||||
Position.X = 313.000000000000000000
|
||||
Position.Y = 198.000000000000000000
|
||||
TabOrder = 46
|
||||
Text = 'Ollama'
|
||||
Visible = False
|
||||
end
|
||||
object GroupBox2: TGroupBox
|
||||
Position.X = 466.000000000000000000
|
||||
Position.Y = 8.000000000000000000
|
||||
Size.Width = 247.000000000000000000
|
||||
Size.Height = 132.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Text = 'Kandinsky'
|
||||
TabOrder = 47
|
||||
object Label3: TLabel
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 25.000000000000000000
|
||||
Text = 'API '#1082#1083#1102#1095
|
||||
TabOrder = 37
|
||||
end
|
||||
object Label4: TLabel
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 80.000000000000000000
|
||||
Text = #1057#1077#1082#1088#1077#1090#1085#1099#1081' '#1082#1083#1102#1095
|
||||
TabOrder = 38
|
||||
end
|
||||
object edtKandiKey: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 39
|
||||
Password = True
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 50.000000000000000000
|
||||
Size.Width = 233.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object edtKandiSecret: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 40
|
||||
Password = True
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 105.000000000000000000
|
||||
Size.Width = 231.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,42 @@
|
||||
unit fAI;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
|
||||
FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls,
|
||||
FMX.Edit, FMX.Controls.Presentation;
|
||||
|
||||
type
|
||||
TfrAI = class(TFrame)
|
||||
btnGetAIDef: TButton;
|
||||
edtAIP2: TEdit;
|
||||
edtAIP1: TEdit;
|
||||
edtGPTPrefix: TEdit;
|
||||
Label45: TLabel;
|
||||
Label47: TLabel;
|
||||
GroupBox1: TGroupBox;
|
||||
rbGC: TRadioButton;
|
||||
RBCustom: TRadioButton;
|
||||
rbDS: TRadioButton;
|
||||
rbCG: TRadioButton;
|
||||
edtAIP3: TEdit;
|
||||
Label1: TLabel;
|
||||
Label2: TLabel;
|
||||
cbOllama: TCheckBox;
|
||||
GroupBox2: TGroupBox;
|
||||
Label3: TLabel;
|
||||
Label4: TLabel;
|
||||
edtKandiKey: TEdit;
|
||||
edtKandiSecret: TEdit;
|
||||
private
|
||||
{ Private declarations }
|
||||
public
|
||||
{ Public declarations }
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.fmx}
|
||||
|
||||
end.
|
||||
@@ -0,0 +1,307 @@
|
||||
object frAutoActions: TfrAutoActions
|
||||
Size.Width = 813.000000000000000000
|
||||
Size.Height = 548.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
object GroupBox20: TGroupBox
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 8.000000000000000000
|
||||
Size.Width = 479.000000000000000000
|
||||
Size.Height = 320.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Text = #1058#1072#1081#1084#1077#1088#1099
|
||||
TabOrder = 1
|
||||
object edtMessage: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 38
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 257.000000000000000000
|
||||
Size.Width = 406.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object edtInterval: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 39
|
||||
Text = '10'
|
||||
Position.X = 412.000000000000000000
|
||||
Position.Y = 257.000000000000000000
|
||||
Size.Width = 55.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object btnAddMessage: TButton
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 287.000000000000000000
|
||||
TabOrder = 40
|
||||
Text = #1044#1086#1073#1072#1074#1080#1090#1100
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnRmMessage: TButton
|
||||
Position.X = 184.000000000000000000
|
||||
Position.Y = 287.000000000000000000
|
||||
TabOrder = 41
|
||||
Text = #1059#1076#1072#1083#1080#1090#1100
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnEditMessage: TButton
|
||||
Position.X = 96.000000000000000000
|
||||
Position.Y = 287.000000000000000000
|
||||
TabOrder = 42
|
||||
Text = #1048#1079#1084#1077#1085#1080#1090#1100
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnNotifyTest: TButton
|
||||
Position.X = 412.000000000000000000
|
||||
Position.Y = 287.000000000000000000
|
||||
Size.Width = 55.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 43
|
||||
Text = #1058#1077#1089#1090
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object sgTimers: TStringGrid
|
||||
CanFocus = True
|
||||
ClipChildren = True
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 24.000000000000000000
|
||||
Size.Width = 463.000000000000000000
|
||||
Size.Height = 225.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 44
|
||||
RowCount = 0
|
||||
Viewport.Width = 459.000000000000000000
|
||||
Viewport.Height = 200.000000000000000000
|
||||
object ccTimerEnable: TCheckColumn
|
||||
Header = #1042#1082#1083
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
end
|
||||
object scTimerMessage: TStringColumn
|
||||
Header = #1057#1086#1086#1073#1097#1077#1085#1080#1077
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
ReadOnly = True
|
||||
Size.Width = 301.000000000000000000
|
||||
end
|
||||
object icTimerInterval: TIntegerColumn
|
||||
Header = #1048#1085#1090#1077#1088#1074#1072#1083
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
ReadOnly = True
|
||||
Size.Width = 67.000000000000000000
|
||||
end
|
||||
object ccTimerO: TCheckColumn
|
||||
Header = #1054
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
end
|
||||
end
|
||||
end
|
||||
object GroupBox23: TGroupBox
|
||||
Position.X = 495.000000000000000000
|
||||
Position.Y = 8.000000000000000000
|
||||
Size.Width = 313.000000000000000000
|
||||
Size.Height = 401.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Text = #1040#1074#1090#1086' '#1073#1072#1085
|
||||
TabOrder = 2
|
||||
object edtBanWords: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 38
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 257.000000000000000000
|
||||
Size.Width = 297.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object btnBanWordsAdd: TButton
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 367.000000000000000000
|
||||
TabOrder = 39
|
||||
Text = #1044#1086#1073#1072#1074#1080#1090#1100
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnBanWordsEdt: TButton
|
||||
Position.X = 96.000000000000000000
|
||||
Position.Y = 367.000000000000000000
|
||||
TabOrder = 40
|
||||
Text = #1048#1079#1084#1077#1085#1080#1090#1100
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnBanWordsDel: TButton
|
||||
Position.X = 184.000000000000000000
|
||||
Position.Y = 367.000000000000000000
|
||||
TabOrder = 41
|
||||
Text = #1059#1076#1072#1083#1080#1090#1100
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object sgBanWords: TStringGrid
|
||||
CanFocus = True
|
||||
ClipChildren = True
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 24.000000000000000000
|
||||
Size.Width = 297.000000000000000000
|
||||
Size.Height = 225.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 42
|
||||
RowCount = 0
|
||||
Viewport.Width = 293.000000000000000000
|
||||
Viewport.Height = 200.000000000000000000
|
||||
object scRegEx: TStringColumn
|
||||
Header = #1056#1077#1075#1091#1083#1103#1088#1085#1086#1077' '#1074#1099#1088#1072#1078#1077#1085#1080#1077
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
ReadOnly = True
|
||||
Size.Width = 265.000000000000000000
|
||||
end
|
||||
end
|
||||
object btnBanWordsCheck: TButton
|
||||
Position.X = 225.000000000000000000
|
||||
Position.Y = 312.000000000000000000
|
||||
TabOrder = 43
|
||||
Text = #1055#1088#1086#1074#1077#1088#1080#1090#1100
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object Label6: TLabel
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 287.000000000000000000
|
||||
TextSettings.Trimming = None
|
||||
Text = #1055#1088#1086#1074#1077#1088#1082#1072':'
|
||||
TabOrder = 44
|
||||
end
|
||||
object edtBanWordsCheck: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 45
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 312.000000000000000000
|
||||
Size.Width = 209.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object Label7: TLabel
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 342.000000000000000000
|
||||
Size.Width = 65.000000000000000000
|
||||
Size.Height = 17.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TextSettings.Trimming = None
|
||||
Text = #1056#1077#1079#1091#1083#1100#1090#1072#1090':'
|
||||
TabOrder = 46
|
||||
end
|
||||
object lBanWordsCheck: TLabel
|
||||
Position.X = 81.000000000000000000
|
||||
Position.Y = 342.000000000000000000
|
||||
TextSettings.Trimming = None
|
||||
Text = #1085#1077#1090' '#1073#1072#1085#1074#1086#1088#1076#1072
|
||||
TabOrder = 47
|
||||
end
|
||||
end
|
||||
object GroupBox17: TGroupBox
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 328.000000000000000000
|
||||
Size.Width = 479.000000000000000000
|
||||
Size.Height = 217.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Text = #1057#1095#1077#1090#1095#1080#1082#1080
|
||||
TabOrder = 0
|
||||
object edtCounterName: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 41
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 153.000000000000000000
|
||||
Size.Width = 102.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object edtCounterTrigger: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 39
|
||||
Position.X = 118.000000000000000000
|
||||
Position.Y = 153.000000000000000000
|
||||
Size.Width = 290.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object edtCounterCount: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 38
|
||||
Text = '0'
|
||||
Position.X = 416.000000000000000000
|
||||
Position.Y = 153.000000000000000000
|
||||
Size.Width = 55.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object btnCounterAdd: TButton
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 183.000000000000000000
|
||||
TabOrder = 40
|
||||
Text = #1044#1086#1073#1072#1074#1080#1090#1100
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnCounterDelete: TButton
|
||||
Position.X = 184.000000000000000000
|
||||
Position.Y = 183.000000000000000000
|
||||
TabOrder = 42
|
||||
Text = #1059#1076#1072#1083#1080#1090#1100
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnCounterP: TButton
|
||||
Position.X = 410.000000000000000000
|
||||
Position.Y = 183.000000000000000000
|
||||
Size.Width = 25.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 43
|
||||
Text = '+'
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnCounterM: TButton
|
||||
Position.X = 443.000000000000000000
|
||||
Position.Y = 183.000000000000000000
|
||||
Size.Width = 24.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 44
|
||||
Text = '-'
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnCounterEdit: TButton
|
||||
Position.X = 96.000000000000000000
|
||||
Position.Y = 183.000000000000000000
|
||||
TabOrder = 45
|
||||
Text = #1048#1079#1084#1077#1085#1080#1090#1100
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object sgCounter: TStringGrid
|
||||
CanFocus = True
|
||||
ClipChildren = True
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 24.000000000000000000
|
||||
Size.Width = 463.000000000000000000
|
||||
Size.Height = 121.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 46
|
||||
RowCount = 0
|
||||
Viewport.Width = 459.000000000000000000
|
||||
Viewport.Height = 96.000000000000000000
|
||||
object scCounterName: TStringColumn
|
||||
Header = #1053#1072#1079#1074#1072#1085#1080#1077
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
ReadOnly = True
|
||||
end
|
||||
object scCounterTrigger: TStringColumn
|
||||
Header = #1058#1088#1080#1075#1075#1077#1088
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
ReadOnly = True
|
||||
Size.Width = 236.000000000000000000
|
||||
end
|
||||
object icCounterCount: TIntegerColumn
|
||||
Header = #1050#1086#1083#1080#1095#1077#1089#1090#1074#1086
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
ReadOnly = True
|
||||
Size.Width = 73.000000000000000000
|
||||
end
|
||||
object ccCounterAuto: TCheckColumn
|
||||
Header = #1040
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,61 @@
|
||||
unit fAutoActions;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
|
||||
FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls,
|
||||
System.Rtti, FMX.Grid.Style, FMX.Grid, FMX.ScrollBox, FMX.Edit,
|
||||
FMX.Controls.Presentation;
|
||||
|
||||
type
|
||||
TfrAutoActions = class(TFrame)
|
||||
GroupBox20: TGroupBox;
|
||||
edtMessage: TEdit;
|
||||
edtInterval: TEdit;
|
||||
btnAddMessage: TButton;
|
||||
btnRmMessage: TButton;
|
||||
btnEditMessage: TButton;
|
||||
btnNotifyTest: TButton;
|
||||
sgTimers: TStringGrid;
|
||||
ccTimerEnable: TCheckColumn;
|
||||
scTimerMessage: TStringColumn;
|
||||
icTimerInterval: TIntegerColumn;
|
||||
ccTimerO: TCheckColumn;
|
||||
GroupBox23: TGroupBox;
|
||||
edtBanWords: TEdit;
|
||||
btnBanWordsAdd: TButton;
|
||||
btnBanWordsEdt: TButton;
|
||||
btnBanWordsDel: TButton;
|
||||
sgBanWords: TStringGrid;
|
||||
scRegEx: TStringColumn;
|
||||
btnBanWordsCheck: TButton;
|
||||
Label6: TLabel;
|
||||
edtBanWordsCheck: TEdit;
|
||||
Label7: TLabel;
|
||||
lBanWordsCheck: TLabel;
|
||||
GroupBox17: TGroupBox;
|
||||
edtCounterName: TEdit;
|
||||
edtCounterTrigger: TEdit;
|
||||
edtCounterCount: TEdit;
|
||||
btnCounterAdd: TButton;
|
||||
btnCounterDelete: TButton;
|
||||
btnCounterP: TButton;
|
||||
btnCounterM: TButton;
|
||||
btnCounterEdit: TButton;
|
||||
sgCounter: TStringGrid;
|
||||
scCounterName: TStringColumn;
|
||||
scCounterTrigger: TStringColumn;
|
||||
icCounterCount: TIntegerColumn;
|
||||
ccCounterAuto: TCheckColumn;
|
||||
private
|
||||
{ Private declarations }
|
||||
public
|
||||
{ Public declarations }
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.fmx}
|
||||
|
||||
end.
|
||||
@@ -0,0 +1,393 @@
|
||||
object frChatOBS: TfrChatOBS
|
||||
Size.Width = 922.000000000000000000
|
||||
Size.Height = 408.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
object GroupBox13: TGroupBox
|
||||
Position.X = 562.000000000000000000
|
||||
Position.Y = 8.000000000000000000
|
||||
Size.Width = 351.000000000000000000
|
||||
Size.Height = 203.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Text = #1064#1088#1080#1092#1090
|
||||
TabOrder = 2
|
||||
object Label41: TLabel
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 22.000000000000000000
|
||||
Size.Width = 100.000000000000000000
|
||||
Size.Height = 17.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TextSettings.Trimming = None
|
||||
Text = #1056#1072#1079#1084#1077#1088' '#1096#1088#1080#1092#1090#1072
|
||||
TabOrder = 9
|
||||
end
|
||||
object sbFontSize: TSpinBox
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 1
|
||||
Cursor = crIBeam
|
||||
Value = 14.000000000000000000
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 47.000000000000000000
|
||||
end
|
||||
object ccbFontColor: TColorComboBox
|
||||
DropDownKind = Custom
|
||||
Color = claNull
|
||||
DisableFocusEffect = False
|
||||
ItemIndex = 147
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 102.000000000000000000
|
||||
Size.Width = 120.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 41
|
||||
end
|
||||
object Label49: TLabel
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 77.000000000000000000
|
||||
TextSettings.Trimming = None
|
||||
Text = #1062#1074#1077#1090' '#1096#1088#1080#1092#1090#1072
|
||||
TabOrder = 39
|
||||
end
|
||||
object cbFontStyleDefault: TComboBox
|
||||
Items.Strings = (
|
||||
'Arial'
|
||||
'Arial Cyr'
|
||||
'Arial Black'
|
||||
'Book antiqua'
|
||||
'Bookman old style'
|
||||
'Calibri'
|
||||
'Cambria'
|
||||
'Candara'
|
||||
'Century'
|
||||
'Century gothic'
|
||||
'Comic Sans Ms'
|
||||
'Consolas'
|
||||
'Constantia'
|
||||
'Corbel'
|
||||
'Courier'
|
||||
'Courier New'
|
||||
'Courier, monospace'
|
||||
'Cursive'
|
||||
'Franklin Gothic'
|
||||
'Gabriola'
|
||||
'Garamond'
|
||||
'Georgia'
|
||||
'Helvetica'
|
||||
'Impact'
|
||||
'Lucida console'
|
||||
'Lucida Sans Unicode'
|
||||
'Mistral (Mistral)'
|
||||
'monospace'
|
||||
'Monotype Corsiva'
|
||||
'MS Sans Serif'
|
||||
'MS Serif'
|
||||
'Palatino Linotype'
|
||||
'Roboto'
|
||||
'Sans-serif'
|
||||
'Segoe print'
|
||||
'Segoe script'
|
||||
'Sylfaen'
|
||||
'Tahoma'
|
||||
'Times New Roman'
|
||||
'Trebuchet ms'
|
||||
'Verdana')
|
||||
ItemIndex = 0
|
||||
Position.X = 136.000000000000000000
|
||||
Position.Y = 47.000000000000000000
|
||||
Size.Width = 206.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 0
|
||||
end
|
||||
object Label46: TLabel
|
||||
Position.X = 136.000000000000000000
|
||||
Position.Y = 22.000000000000000000
|
||||
TextSettings.Trimming = None
|
||||
Text = #1064#1088#1080#1092#1090
|
||||
TabOrder = 42
|
||||
end
|
||||
object ccbBColor: TColorComboBox
|
||||
DropDownKind = Custom
|
||||
Color = claLime
|
||||
DisableFocusEffect = False
|
||||
ItemIndex = 82
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 157.000000000000000000
|
||||
Size.Width = 120.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 40
|
||||
end
|
||||
object Label1: TLabel
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 132.000000000000000000
|
||||
TextSettings.Trimming = None
|
||||
Text = #1062#1074#1077#1090' '#1092#1086#1085#1072
|
||||
TabOrder = 38
|
||||
end
|
||||
object btnChangeBGColor: TButton
|
||||
Position.X = 136.000000000000000000
|
||||
Position.Y = 157.000000000000000000
|
||||
Size.Width = 145.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 43
|
||||
Text = #1055#1088#1080#1084#1077#1085#1080#1090#1100' '#1094#1074#1077#1090' '#1092#1086#1085#1072
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
end
|
||||
object GroupBox12: TGroupBox
|
||||
Position.X = 241.000000000000000000
|
||||
Position.Y = 8.000000000000000000
|
||||
Size.Width = 313.000000000000000000
|
||||
Size.Height = 203.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Text = #1041#1083#1086#1082' '#1089#1086#1086#1073#1097#1077#1085#1080#1103
|
||||
TabOrder = 1
|
||||
object cpStyleBlockColor: TColorPanel
|
||||
Color = claWhite
|
||||
Position.X = 16.000000000000000000
|
||||
Position.Y = 45.000000000000000000
|
||||
Size.Width = 161.000000000000000000
|
||||
Size.Height = 150.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 7
|
||||
end
|
||||
object Label40: TLabel
|
||||
Position.X = 16.000000000000000000
|
||||
Position.Y = 20.000000000000000000
|
||||
Size.Width = 161.000000000000000000
|
||||
Size.Height = 17.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TextSettings.Trimming = None
|
||||
Text = #1062#1074#1077#1090' '#1080' '#1087#1088#1086#1079#1088#1072#1095#1085#1086#1089#1090#1100' '#1073#1083#1086#1082#1072
|
||||
TabOrder = 8
|
||||
end
|
||||
object Label42: TLabel
|
||||
Position.X = 185.000000000000000000
|
||||
Position.Y = 22.000000000000000000
|
||||
TextSettings.Trimming = None
|
||||
Text = #1062#1074#1077#1090' '#1088#1072#1084#1082#1080
|
||||
TabOrder = 38
|
||||
end
|
||||
object ccbStyleBorderColor: TColorComboBox
|
||||
DropDownKind = Custom
|
||||
Color = claNull
|
||||
DisableFocusEffect = False
|
||||
ItemIndex = 147
|
||||
Position.X = 185.000000000000000000
|
||||
Position.Y = 47.000000000000000000
|
||||
Size.Width = 120.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 39
|
||||
end
|
||||
object Label44: TLabel
|
||||
Position.X = 185.000000000000000000
|
||||
Position.Y = 132.000000000000000000
|
||||
TextSettings.Trimming = None
|
||||
Text = #1054#1090#1089#1090#1091#1087#1099
|
||||
TabOrder = 41
|
||||
end
|
||||
object sbStyleBlockPadding: TSpinBox
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 43
|
||||
Cursor = crIBeam
|
||||
Value = 10.000000000000000000
|
||||
Position.X = 185.000000000000000000
|
||||
Position.Y = 157.000000000000000000
|
||||
Size.Width = 120.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object sbStyleBlockBorderSize: TSpinBox
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 42
|
||||
Cursor = crIBeam
|
||||
Value = 2.000000000000000000
|
||||
Position.X = 185.000000000000000000
|
||||
Position.Y = 102.000000000000000000
|
||||
Size.Width = 120.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object Label48: TLabel
|
||||
Position.X = 185.000000000000000000
|
||||
Position.Y = 77.000000000000000000
|
||||
TextSettings.Trimming = None
|
||||
Text = #1058#1086#1083#1097#1080#1085#1072' '#1088#1072#1084#1082#1080
|
||||
TabOrder = 40
|
||||
end
|
||||
end
|
||||
object GroupBox10: TGroupBox
|
||||
Position.X = 1.000000000000000000
|
||||
Position.Y = 8.000000000000000000
|
||||
Size.Width = 232.000000000000000000
|
||||
Size.Height = 203.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Text = #1053#1072#1089#1090#1088#1086#1081#1082#1080
|
||||
TabOrder = 0
|
||||
object Label27: TLabel
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 22.000000000000000000
|
||||
Size.Width = 249.000000000000000000
|
||||
Size.Height = 17.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TextSettings.Trimming = None
|
||||
Text = #1052#1072#1082#1089#1080#1084#1072#1083#1100#1085#1086#1077' '#1082#1086#1083#1080#1095#1077#1089#1090#1074#1086' '#1089#1086#1086#1073#1097#1077#1085#1080#1081
|
||||
TabOrder = 3
|
||||
end
|
||||
object Label38: TLabel
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 77.000000000000000000
|
||||
Size.Width = 249.000000000000000000
|
||||
Size.Height = 17.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TextSettings.Trimming = None
|
||||
Text = #1042#1088#1077#1084#1103' '#1086#1090#1086#1073#1088#1072#1078#1077#1085#1080#1103' '#1089#1086#1086#1073#1097#1077#1085#1080#1103
|
||||
TabOrder = 0
|
||||
end
|
||||
object sbMaxMsg: TSpinBox
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 5
|
||||
Cursor = crIBeam
|
||||
Value = 5.000000000000000000
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 47.000000000000000000
|
||||
end
|
||||
object sbTimeMsg: TSpinBox
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 2
|
||||
Cursor = crIBeam
|
||||
Value = 10.000000000000000000
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 102.000000000000000000
|
||||
end
|
||||
object Label39: TLabel
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 132.000000000000000000
|
||||
Size.Width = 193.000000000000000000
|
||||
Size.Height = 17.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TextSettings.Trimming = None
|
||||
Text = #1055#1086#1088#1090' '#1042#1077#1073' '#1057#1077#1088#1074#1077#1088#1072
|
||||
TabOrder = 6
|
||||
end
|
||||
object cbFreez: TCheckBox
|
||||
Position.X = 112.000000000000000000
|
||||
Position.Y = 105.000000000000000000
|
||||
Size.Width = 112.000000000000000000
|
||||
Size.Height = 19.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 38
|
||||
Text = #1042#1077#1095#1085#1086
|
||||
end
|
||||
object sbWebServerPort: TSpinBox
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 4
|
||||
Cursor = crIBeam
|
||||
Min = 8080.000000000000000000
|
||||
Max = 65000.000000000000000000
|
||||
Value = 8085.000000000000000000
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 157.000000000000000000
|
||||
end
|
||||
end
|
||||
object btnWebChatTest: TButton
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 249.000000000000000000
|
||||
Size.Width = 152.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 3
|
||||
Text = #1058#1077#1089#1090#1086#1074#1086#1077' '#1089#1086#1086#1073#1097#1077#1085#1080#1077
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object edtWebChatTest: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 4
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 219.000000000000000000
|
||||
Size.Width = 225.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object btnCreateWebChat: TButton
|
||||
Position.X = 241.000000000000000000
|
||||
Position.Y = 219.000000000000000000
|
||||
TabOrder = 5
|
||||
Text = #1057#1086#1079#1076#1072#1090#1100' '#1095#1072#1090
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnDeleteWebChat: TButton
|
||||
Position.X = 329.000000000000000000
|
||||
Position.Y = 219.000000000000000000
|
||||
TabOrder = 6
|
||||
Text = #1059#1076#1072#1083#1080#1090#1100' '#1095#1072#1090
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object sgWebChats: TStringGrid
|
||||
Align = Bottom
|
||||
CanFocus = True
|
||||
ClipChildren = True
|
||||
Position.Y = 288.000000000000000000
|
||||
Size.Width = 922.000000000000000000
|
||||
Size.Height = 120.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 7
|
||||
RowCount = 0
|
||||
Options = [ColumnResize, ColumnMove, ColLines, RowLines, Tabs, Header, HeaderClick, AutoDisplacement]
|
||||
Viewport.Width = 918.000000000000000000
|
||||
Viewport.Height = 95.000000000000000000
|
||||
object StringColumn1: TStringColumn
|
||||
Header = #1055#1086#1088#1090
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
end
|
||||
object IntegerColumn1: TIntegerColumn
|
||||
Header = #1052#1072#1082#1089' '#1089#1086#1086#1073#1097
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
Size.Width = 80.000000000000000000
|
||||
end
|
||||
object IntegerColumn2: TIntegerColumn
|
||||
Header = #1042#1088#1077#1084#1103' '#1089#1086#1086#1073#1097
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
Size.Width = 82.000000000000000000
|
||||
end
|
||||
object CheckColumn1: TCheckColumn
|
||||
Header = #1042#1077#1095#1085#1086
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
end
|
||||
object StringColumn2: TStringColumn
|
||||
Header = #1062#1074#1077#1090' '#1088#1072#1084#1082#1080
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
end
|
||||
object StringColumn3: TStringColumn
|
||||
Header = #1062#1074#1077#1090' '#1073#1083#1086#1082#1072
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
end
|
||||
object IntegerColumn5: TIntegerColumn
|
||||
Header = #1058#1086#1083#1097#1080#1085#1072
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
Size.Width = 80.000000000000000000
|
||||
end
|
||||
object IntegerColumn4: TIntegerColumn
|
||||
Header = #1054#1090#1089#1090#1091#1087#1099
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
end
|
||||
object StringColumn4: TStringColumn
|
||||
Header = #1064#1088#1080#1092#1090
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
end
|
||||
object StringColumn5: TStringColumn
|
||||
Header = #1062#1074#1077#1090' '#1096#1088#1080#1092#1090#1072
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
end
|
||||
object StringColumn6: TStringColumn
|
||||
Header = #1062#1074#1077#1090' '#1092#1086#1085#1072
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
end
|
||||
object IntegerColumn3: TIntegerColumn
|
||||
Header = #1056#1072#1079#1084#1077#1088' '#1096#1088#1080#1092#1090#1072
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,67 @@
|
||||
unit fChatOBS;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
|
||||
FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls,
|
||||
System.Rtti, FMX.Grid.Style, FMX.Grid, FMX.ScrollBox, FMX.Edit, FMX.Colors,
|
||||
FMX.ListBox, FMX.EditBox, FMX.SpinBox, FMX.Controls.Presentation;
|
||||
|
||||
type
|
||||
TfrChatOBS = class(TFrame)
|
||||
GroupBox13: TGroupBox;
|
||||
Label41: TLabel;
|
||||
sbFontSize: TSpinBox;
|
||||
ccbFontColor: TColorComboBox;
|
||||
Label49: TLabel;
|
||||
cbFontStyleDefault: TComboBox;
|
||||
Label46: TLabel;
|
||||
ccbBColor: TColorComboBox;
|
||||
Label1: TLabel;
|
||||
btnChangeBGColor: TButton;
|
||||
GroupBox12: TGroupBox;
|
||||
cpStyleBlockColor: TColorPanel;
|
||||
Label40: TLabel;
|
||||
Label42: TLabel;
|
||||
ccbStyleBorderColor: TColorComboBox;
|
||||
Label44: TLabel;
|
||||
sbStyleBlockPadding: TSpinBox;
|
||||
sbStyleBlockBorderSize: TSpinBox;
|
||||
Label48: TLabel;
|
||||
GroupBox10: TGroupBox;
|
||||
Label27: TLabel;
|
||||
Label38: TLabel;
|
||||
sbMaxMsg: TSpinBox;
|
||||
sbTimeMsg: TSpinBox;
|
||||
Label39: TLabel;
|
||||
cbFreez: TCheckBox;
|
||||
sbWebServerPort: TSpinBox;
|
||||
btnWebChatTest: TButton;
|
||||
edtWebChatTest: TEdit;
|
||||
btnCreateWebChat: TButton;
|
||||
btnDeleteWebChat: TButton;
|
||||
sgWebChats: TStringGrid;
|
||||
StringColumn1: TStringColumn;
|
||||
IntegerColumn1: TIntegerColumn;
|
||||
IntegerColumn2: TIntegerColumn;
|
||||
CheckColumn1: TCheckColumn;
|
||||
StringColumn2: TStringColumn;
|
||||
StringColumn3: TStringColumn;
|
||||
IntegerColumn5: TIntegerColumn;
|
||||
IntegerColumn4: TIntegerColumn;
|
||||
StringColumn4: TStringColumn;
|
||||
StringColumn5: TStringColumn;
|
||||
StringColumn6: TStringColumn;
|
||||
IntegerColumn3: TIntegerColumn;
|
||||
private
|
||||
{ Private declarations }
|
||||
public
|
||||
{ Public declarations }
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.fmx}
|
||||
|
||||
end.
|
||||
@@ -0,0 +1,654 @@
|
||||
object frCommands: TfrCommands
|
||||
Size.Width = 1052.000000000000000000
|
||||
Size.Height = 719.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
object sgCommands: TStringGrid
|
||||
CanFocus = True
|
||||
ClipChildren = True
|
||||
Position.X = 5.000000000000000000
|
||||
Position.Y = 8.000000000000000000
|
||||
Size.Width = 606.000000000000000000
|
||||
Size.Height = 193.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 6
|
||||
RowCount = 0
|
||||
Options = [ColumnResize, ColumnMove, ColLines, RowLines, Tabs, Header, HeaderClick, AutoDisplacement]
|
||||
Viewport.Width = 602.000000000000000000
|
||||
Viewport.Height = 168.000000000000000000
|
||||
object scCommand: TStringColumn
|
||||
Header = #1050#1086#1084#1072#1085#1076#1072
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
Size.Width = 134.000000000000000000
|
||||
end
|
||||
object scResponse: TStringColumn
|
||||
Header = #1054#1090#1074#1077#1090
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
Size.Width = 446.000000000000000000
|
||||
end
|
||||
end
|
||||
object GroupBox1: TGroupBox
|
||||
Padding.Left = 5.000000000000000000
|
||||
Padding.Top = 20.000000000000000000
|
||||
Padding.Right = 5.000000000000000000
|
||||
Padding.Bottom = 5.000000000000000000
|
||||
Position.X = 619.000000000000000000
|
||||
Position.Y = 8.000000000000000000
|
||||
Size.Width = 395.000000000000000000
|
||||
Size.Height = 442.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Text = #1050#1086#1085#1089#1090#1088#1091#1082#1090#1086#1088' '#1086#1090#1074#1077#1090#1072
|
||||
TabOrder = 0
|
||||
object Label12: TLabel
|
||||
Position.X = 9.000000000000000000
|
||||
Position.Y = 24.000000000000000000
|
||||
TextSettings.Trimming = None
|
||||
Text = #1050#1086#1084#1072#1085#1076#1072
|
||||
TabOrder = 38
|
||||
end
|
||||
object edtCommand: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 39
|
||||
Position.X = 9.000000000000000000
|
||||
Position.Y = 49.000000000000000000
|
||||
Size.Width = 208.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object mResponse: TMemo
|
||||
Touch.InteractiveGestures = [Pan, LongTap, DoubleTap]
|
||||
DataDetectorTypes = []
|
||||
TextSettings.WordWrap = True
|
||||
Position.X = 9.000000000000000000
|
||||
Position.Y = 104.000000000000000000
|
||||
Size.Width = 376.000000000000000000
|
||||
Size.Height = 177.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 40
|
||||
Viewport.Width = 372.000000000000000000
|
||||
Viewport.Height = 173.000000000000000000
|
||||
end
|
||||
object Label14: TLabel
|
||||
Position.X = 9.000000000000000000
|
||||
Position.Y = 79.000000000000000000
|
||||
TextSettings.Trimming = None
|
||||
Text = #1054#1090#1074#1077#1090
|
||||
TabOrder = 41
|
||||
end
|
||||
object GroupBox7: TGroupBox
|
||||
Padding.Left = 5.000000000000000000
|
||||
Padding.Top = 20.000000000000000000
|
||||
Padding.Right = 5.000000000000000000
|
||||
Padding.Bottom = 5.000000000000000000
|
||||
Position.X = 9.000000000000000000
|
||||
Position.Y = 283.000000000000000000
|
||||
Size.Width = 376.000000000000000000
|
||||
Size.Height = 120.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Text = #1042#1089#1090#1072#1074#1082#1080
|
||||
TabOrder = 42
|
||||
object btnAddUserName: TButton
|
||||
Position.X = 9.000000000000000000
|
||||
Position.Y = 24.000000000000000000
|
||||
Size.Width = 94.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 38
|
||||
Text = #1054#1073#1088#1072#1097#1077#1085#1080#1077
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnGetDateFollow: TButton
|
||||
Position.X = 111.000000000000000000
|
||||
Position.Y = 24.000000000000000000
|
||||
TabOrder = 39
|
||||
Text = 'Follow'
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnGetAgeAccaunt: TButton
|
||||
Position.X = 199.000000000000000000
|
||||
Position.Y = 24.000000000000000000
|
||||
TabOrder = 40
|
||||
Text = 'Age'
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnCounterAddtoText: TButton
|
||||
Position.X = 9.000000000000000000
|
||||
Position.Y = 54.000000000000000000
|
||||
Size.Width = 94.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 41
|
||||
Text = #1057#1095#1077#1090#1095#1080#1082
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object cbCounterName: TComboBox
|
||||
Position.X = 111.000000000000000000
|
||||
Position.Y = 54.000000000000000000
|
||||
Size.Width = 168.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 42
|
||||
end
|
||||
object btnGPT: TButton
|
||||
Position.X = 287.000000000000000000
|
||||
Position.Y = 24.000000000000000000
|
||||
TabOrder = 43
|
||||
Text = #1053#1077#1081#1088#1086#1085#1082#1072
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnRandomUserName: TButton
|
||||
Position.X = 9.000000000000000000
|
||||
Position.Y = 84.000000000000000000
|
||||
Size.Width = 168.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 44
|
||||
Text = #1056#1072#1085#1076#1086#1084#1085#1099#1081' '#1087#1086#1083#1100#1079#1086#1074#1072#1090#1077#1083#1100
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnGetChannelStat: TButton
|
||||
Position.X = 185.000000000000000000
|
||||
Position.Y = 84.000000000000000000
|
||||
Size.Width = 122.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 45
|
||||
Text = #1057#1090#1072#1090#1080#1089#1090#1080#1082#1072' '#1082#1072#1085#1072#1083#1072
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnAIPic: TButton
|
||||
Position.X = 287.000000000000000000
|
||||
Position.Y = 54.000000000000000000
|
||||
TabOrder = 46
|
||||
Text = #1050#1072#1088#1090#1080#1085#1082#1072
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
end
|
||||
object btnAddCommand: TButton
|
||||
Position.X = 9.000000000000000000
|
||||
Position.Y = 411.000000000000000000
|
||||
TabOrder = 43
|
||||
Text = #1044#1086#1073#1072#1074#1080#1090#1100
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnEditCommand: TButton
|
||||
Position.X = 97.000000000000000000
|
||||
Position.Y = 411.000000000000000000
|
||||
TabOrder = 44
|
||||
Text = #1048#1079#1084#1077#1085#1080#1090#1100
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnRmCommand: TButton
|
||||
Position.X = 185.000000000000000000
|
||||
Position.Y = 411.000000000000000000
|
||||
TabOrder = 45
|
||||
Text = #1059#1076#1072#1083#1080#1090#1100
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object cbTextToSpeech: TCheckBox
|
||||
Position.X = 168.000000000000000000
|
||||
Position.Y = 16.000000000000000000
|
||||
Size.Width = 217.000000000000000000
|
||||
Size.Height = 19.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 46
|
||||
Text = #1054#1079#1074#1091#1095#1080#1074#1072#1090#1100' '#1089#1086#1086#1073#1097#1077#1085#1080#1103' '#1087#1086#1089#1083#1077' "!!!"'
|
||||
Visible = False
|
||||
end
|
||||
end
|
||||
object GroupBox9: TGroupBox
|
||||
Padding.Left = 5.000000000000000000
|
||||
Padding.Top = 20.000000000000000000
|
||||
Padding.Right = 5.000000000000000000
|
||||
Padding.Bottom = 5.000000000000000000
|
||||
Position.X = 191.000000000000000000
|
||||
Position.Y = 209.000000000000000000
|
||||
Size.Width = 412.000000000000000000
|
||||
Size.Height = 241.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Text = #1056#1072#1085#1076#1086#1084#1085#1099#1077' '#1075#1088#1091#1087#1087#1099' '#1086#1090#1074#1077#1090#1086#1074
|
||||
TabOrder = 3
|
||||
object lbRandomGroup: TListBox
|
||||
Position.X = 9.000000000000000000
|
||||
Position.Y = 49.000000000000000000
|
||||
Size.Width = 121.000000000000000000
|
||||
Size.Height = 120.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 11
|
||||
DisableFocusEffect = True
|
||||
ItemHeight = 13.000000000000000000
|
||||
DefaultItemStyles.ItemStyle = ''
|
||||
DefaultItemStyles.GroupHeaderStyle = ''
|
||||
DefaultItemStyles.GroupFooterStyle = ''
|
||||
Left = 208
|
||||
Top = 315
|
||||
Viewport.Width = 117.000000000000000000
|
||||
Viewport.Height = 116.000000000000000000
|
||||
end
|
||||
object lbRandomRespons: TListBox
|
||||
Position.X = 127.000000000000000000
|
||||
Position.Y = 49.000000000000000000
|
||||
Size.Width = 274.000000000000000000
|
||||
Size.Height = 120.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 13
|
||||
DisableFocusEffect = True
|
||||
ItemHeight = 13.000000000000000000
|
||||
DefaultItemStyles.ItemStyle = ''
|
||||
DefaultItemStyles.GroupHeaderStyle = ''
|
||||
DefaultItemStyles.GroupFooterStyle = ''
|
||||
Left = 335
|
||||
Top = 315
|
||||
Viewport.Width = 270.000000000000000000
|
||||
Viewport.Height = 116.000000000000000000
|
||||
end
|
||||
object edtRandomGroup: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 12
|
||||
Text = 'GRP1'
|
||||
Position.X = 9.000000000000000000
|
||||
Position.Y = 177.000000000000000000
|
||||
Size.Width = 121.000000000000000000
|
||||
Size.Height = 21.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Left = 208
|
||||
Top = 514
|
||||
end
|
||||
object edtRandomRespons: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 14
|
||||
Position.X = 127.000000000000000000
|
||||
Position.Y = 177.000000000000000000
|
||||
Size.Width = 274.000000000000000000
|
||||
Size.Height = 21.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Left = 335
|
||||
Top = 514
|
||||
end
|
||||
object btnRandomAdd: TButton
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 206.000000000000000000
|
||||
TabOrder = 38
|
||||
Text = #1044#1086#1073#1072#1074#1080#1090#1100
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnRandomDel: TButton
|
||||
Position.X = 97.000000000000000000
|
||||
Position.Y = 206.000000000000000000
|
||||
Size.Width = 70.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 39
|
||||
Text = #1059#1076#1072#1083#1080#1090#1100
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnRmGroup: TButton
|
||||
Position.X = 263.000000000000000000
|
||||
Position.Y = 206.000000000000000000
|
||||
Size.Width = 138.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 40
|
||||
Text = #1059#1076#1072#1083#1080#1090#1100' '#1074#1089#1102' '#1075#1088#1091#1087#1087#1091
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object Label4: TLabel
|
||||
Position.X = 9.000000000000000000
|
||||
Position.Y = 24.000000000000000000
|
||||
Size.Width = 110.000000000000000000
|
||||
Size.Height = 17.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TextSettings.Trimming = None
|
||||
Text = #1043#1088#1091#1087#1087#1072
|
||||
TabOrder = 41
|
||||
end
|
||||
object Label5: TLabel
|
||||
Position.X = 127.000000000000000000
|
||||
Position.Y = 24.000000000000000000
|
||||
TextSettings.Trimming = None
|
||||
Text = #1042#1072#1088#1080#1072#1085#1090#1099' '#1086#1090#1074#1077#1090#1072
|
||||
TabOrder = 42
|
||||
end
|
||||
end
|
||||
object GroupBox8: TGroupBox
|
||||
Padding.Left = 5.000000000000000000
|
||||
Padding.Top = 20.000000000000000000
|
||||
Padding.Right = 5.000000000000000000
|
||||
Padding.Bottom = 5.000000000000000000
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 209.000000000000000000
|
||||
Size.Width = 175.000000000000000000
|
||||
Size.Height = 241.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Text = #1056#1072#1085#1076#1086#1084#1085#1099#1077' '#1095#1080#1089#1083#1072
|
||||
TabOrder = 1
|
||||
object edtRandomName: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 3
|
||||
Text = 'RANDOM1'
|
||||
Position.X = 9.000000000000000000
|
||||
Position.Y = 176.000000000000000000
|
||||
Size.Width = 74.000000000000000000
|
||||
Size.Height = 21.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Left = 3
|
||||
Top = 514
|
||||
end
|
||||
object edtOt: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 4
|
||||
Text = '0'
|
||||
Position.X = 82.000000000000000000
|
||||
Position.Y = 176.000000000000000000
|
||||
Size.Width = 41.000000000000000000
|
||||
Size.Height = 21.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Left = 83
|
||||
Top = 514
|
||||
end
|
||||
object edtTo: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 5
|
||||
Text = '100'
|
||||
Position.X = 123.000000000000000000
|
||||
Position.Y = 176.000000000000000000
|
||||
Size.Width = 41.000000000000000000
|
||||
Size.Height = 21.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Left = 130
|
||||
Top = 514
|
||||
end
|
||||
object btnRandAdd: TButton
|
||||
Position.X = 9.000000000000000000
|
||||
Position.Y = 205.000000000000000000
|
||||
TabOrder = 34
|
||||
Text = #1044#1086#1073#1072#1074#1080#1090#1100
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnRandDel: TButton
|
||||
Position.X = 97.000000000000000000
|
||||
Position.Y = 205.000000000000000000
|
||||
Size.Width = 70.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 35
|
||||
Text = #1059#1076#1072#1083#1080#1090#1100
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object sgRandomInt: TStringGrid
|
||||
CanFocus = True
|
||||
ClipChildren = True
|
||||
Position.X = 9.000000000000000000
|
||||
Position.Y = 24.000000000000000000
|
||||
Size.Width = 157.000000000000000000
|
||||
Size.Height = 144.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 36
|
||||
RowCount = 0
|
||||
Options = [ColumnResize, ColumnMove, ColLines, RowLines, Tabs, Header, HeaderClick, AutoDisplacement]
|
||||
Viewport.Width = 153.000000000000000000
|
||||
Viewport.Height = 119.000000000000000000
|
||||
object scRIntName: TStringColumn
|
||||
Header = #1053#1072#1079#1074#1072#1085#1080#1077
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
Size.Width = 70.000000000000000000
|
||||
end
|
||||
object IntegerColumn1: TIntegerColumn
|
||||
Header = #1054#1090
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
Size.Width = 31.000000000000000000
|
||||
end
|
||||
object scRIntTo: TIntegerColumn
|
||||
Header = #1044#1086
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
Size.Width = 31.000000000000000000
|
||||
end
|
||||
end
|
||||
end
|
||||
object GroupBox11: TGroupBox
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 458.000000000000000000
|
||||
Size.Width = 361.000000000000000000
|
||||
Size.Height = 240.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Text = #1047#1074#1091#1082
|
||||
TabOrder = 4
|
||||
object btnSoundAdd: TButton
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 211.000000000000000000
|
||||
TabOrder = 38
|
||||
Text = #1044#1086#1073#1072#1074#1080#1090#1100
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnSoundDel: TButton
|
||||
Position.X = 96.000000000000000000
|
||||
Position.Y = 211.000000000000000000
|
||||
Size.Width = 70.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 39
|
||||
Text = #1059#1076#1072#1083#1080#1090#1100
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object edtSoundName: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 40
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 181.000000000000000000
|
||||
Size.Width = 106.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object edtSoundFileName: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 41
|
||||
Position.X = 122.000000000000000000
|
||||
Position.Y = 180.000000000000000000
|
||||
Size.Width = 196.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object btnSoundOpen: TButton
|
||||
Position.X = 326.000000000000000000
|
||||
Position.Y = 181.000000000000000000
|
||||
Size.Width = 27.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 42
|
||||
Text = '...'
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object tbSoundVolume: TTrackBar
|
||||
CanParentFocus = True
|
||||
Orientation = Horizontal
|
||||
Position.X = 174.000000000000000000
|
||||
Position.Y = 211.000000000000000000
|
||||
Size.Width = 91.000000000000000000
|
||||
Size.Height = 19.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 43
|
||||
Value = 100.000000000000000000
|
||||
end
|
||||
object btnSoundTest: TButton
|
||||
Position.X = 273.000000000000000000
|
||||
Position.Y = 210.000000000000000000
|
||||
TabOrder = 44
|
||||
Text = #1058#1077#1089#1090
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object sgSAFiles: TStringGrid
|
||||
CanFocus = True
|
||||
ClipChildren = True
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 24.000000000000000000
|
||||
Size.Width = 345.000000000000000000
|
||||
Size.Height = 149.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 45
|
||||
RowCount = 0
|
||||
Options = [ColumnResize, ColumnMove, ColLines, RowLines, Tabs, Header, HeaderClick, AutoDisplacement]
|
||||
Viewport.Width = 341.000000000000000000
|
||||
Viewport.Height = 124.000000000000000000
|
||||
object sgSAName: TStringColumn
|
||||
Header = #1053#1072#1079#1074#1072#1085#1080#1077
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
end
|
||||
object sgSAFile: TStringColumn
|
||||
Header = #1060#1072#1081#1083
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
Size.Width = 220.000000000000000000
|
||||
end
|
||||
end
|
||||
end
|
||||
object GroupBox24: TGroupBox
|
||||
Position.X = 377.000000000000000000
|
||||
Position.Y = 458.000000000000000000
|
||||
Size.Width = 332.000000000000000000
|
||||
Size.Height = 241.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Text = #1060#1072#1081#1083#1099
|
||||
TabOrder = 2
|
||||
object btnTextAdd: TButton
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 211.000000000000000000
|
||||
TabOrder = 38
|
||||
Text = #1044#1086#1073#1072#1074#1080#1090#1100
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnTextDel: TButton
|
||||
Position.X = 96.000000000000000000
|
||||
Position.Y = 211.000000000000000000
|
||||
Size.Width = 70.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 39
|
||||
Text = #1059#1076#1072#1083#1080#1090#1100
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object edtTextName: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 40
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 181.000000000000000000
|
||||
end
|
||||
object edtTextFileName: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 41
|
||||
Position.X = 116.000000000000000000
|
||||
Position.Y = 181.000000000000000000
|
||||
Size.Width = 141.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object btnTextOpen: TButton
|
||||
Position.X = 265.000000000000000000
|
||||
Position.Y = 181.000000000000000000
|
||||
Size.Width = 34.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 42
|
||||
Text = '...'
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object sgTFiles: TStringGrid
|
||||
CanFocus = True
|
||||
ClipChildren = True
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 24.000000000000000000
|
||||
Size.Width = 297.000000000000000000
|
||||
Size.Height = 149.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 45
|
||||
RowCount = 0
|
||||
Options = [ColumnResize, ColumnMove, ColLines, RowLines, Tabs, Header, HeaderClick, AutoDisplacement]
|
||||
Viewport.Width = 293.000000000000000000
|
||||
Viewport.Height = 124.000000000000000000
|
||||
object scTFileName: TStringColumn
|
||||
Header = #1053#1072#1079#1074#1072#1085#1080#1077
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
end
|
||||
object scTFileFile: TStringColumn
|
||||
Header = #1060#1072#1081#1083
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
Size.Width = 170.000000000000000000
|
||||
end
|
||||
end
|
||||
end
|
||||
object OpenDialog1: TOpenDialog
|
||||
Left = 744
|
||||
Top = 392
|
||||
end
|
||||
object GroupBox2: TGroupBox
|
||||
Position.X = 717.000000000000000000
|
||||
Position.Y = 458.000000000000000000
|
||||
Size.Width = 324.000000000000000000
|
||||
Size.Height = 240.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Text = #1053#1077#1081#1088#1086#1082#1086#1085#1089#1090#1088#1091#1082#1090#1086#1088
|
||||
TabOrder = 8
|
||||
object sgAIGen: TStringGrid
|
||||
CanFocus = True
|
||||
ClipChildren = True
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 24.000000000000000000
|
||||
Size.Width = 305.000000000000000000
|
||||
Size.Height = 149.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 38
|
||||
RowCount = 0
|
||||
Options = [ColumnResize, ColumnMove, ColLines, RowLines, Tabs, Header, HeaderClick, AutoDisplacement]
|
||||
Viewport.Width = 301.000000000000000000
|
||||
Viewport.Height = 124.000000000000000000
|
||||
object StringColumn1: TStringColumn
|
||||
Header = #1053#1072#1079#1074#1072#1085#1080#1077
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
end
|
||||
object StringColumn2: TStringColumn
|
||||
Header = #1047#1072#1087#1088#1086#1089
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
Size.Width = 180.000000000000000000
|
||||
end
|
||||
end
|
||||
object edtAIGenName: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 39
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 181.000000000000000000
|
||||
Size.Width = 102.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object edtAIGenRequest: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 40
|
||||
Position.X = 118.000000000000000000
|
||||
Position.Y = 181.000000000000000000
|
||||
Size.Width = 195.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object btnAIGenAdd: TButton
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 211.000000000000000000
|
||||
TabOrder = 41
|
||||
Text = #1044#1086#1073#1072#1074#1080#1090#1100
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnAIGenDel: TButton
|
||||
Position.X = 96.000000000000000000
|
||||
Position.Y = 211.000000000000000000
|
||||
TabOrder = 42
|
||||
Text = #1059#1076#1072#1083#1080#1090#1100
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnAIGetTextUser: TButton
|
||||
Position.X = 184.000000000000000000
|
||||
Position.Y = 211.000000000000000000
|
||||
Size.Width = 129.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 43
|
||||
Text = #1058#1077#1082#1089#1090' '#1087#1086#1083#1100#1079#1086#1074#1072#1090#1077#1083#1103
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,95 @@
|
||||
unit fCommands;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
|
||||
FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls,
|
||||
System.Rtti, FMX.Grid.Style, FMX.Memo.Types, FMX.Grid, FMX.Layouts,
|
||||
FMX.ListBox, FMX.Memo, FMX.Edit, FMX.Controls.Presentation, FMX.ScrollBox;
|
||||
|
||||
type
|
||||
TfrCommands = class(TFrame)
|
||||
sgCommands: TStringGrid;
|
||||
scCommand: TStringColumn;
|
||||
scResponse: TStringColumn;
|
||||
GroupBox1: TGroupBox;
|
||||
Label12: TLabel;
|
||||
edtCommand: TEdit;
|
||||
mResponse: TMemo;
|
||||
Label14: TLabel;
|
||||
GroupBox7: TGroupBox;
|
||||
btnAddUserName: TButton;
|
||||
btnGetDateFollow: TButton;
|
||||
btnGetAgeAccaunt: TButton;
|
||||
btnCounterAddtoText: TButton;
|
||||
cbCounterName: TComboBox;
|
||||
btnGPT: TButton;
|
||||
btnRandomUserName: TButton;
|
||||
btnGetChannelStat: TButton;
|
||||
btnAIPic: TButton;
|
||||
btnAddCommand: TButton;
|
||||
btnEditCommand: TButton;
|
||||
btnRmCommand: TButton;
|
||||
cbTextToSpeech: TCheckBox;
|
||||
GroupBox9: TGroupBox;
|
||||
lbRandomGroup: TListBox;
|
||||
lbRandomRespons: TListBox;
|
||||
edtRandomGroup: TEdit;
|
||||
edtRandomRespons: TEdit;
|
||||
btnRandomAdd: TButton;
|
||||
btnRandomDel: TButton;
|
||||
btnRmGroup: TButton;
|
||||
Label4: TLabel;
|
||||
Label5: TLabel;
|
||||
GroupBox8: TGroupBox;
|
||||
edtRandomName: TEdit;
|
||||
edtOt: TEdit;
|
||||
edtTo: TEdit;
|
||||
btnRandAdd: TButton;
|
||||
btnRandDel: TButton;
|
||||
sgRandomInt: TStringGrid;
|
||||
scRIntName: TStringColumn;
|
||||
IntegerColumn1: TIntegerColumn;
|
||||
scRIntTo: TIntegerColumn;
|
||||
GroupBox11: TGroupBox;
|
||||
btnSoundAdd: TButton;
|
||||
btnSoundDel: TButton;
|
||||
edtSoundName: TEdit;
|
||||
edtSoundFileName: TEdit;
|
||||
btnSoundOpen: TButton;
|
||||
tbSoundVolume: TTrackBar;
|
||||
btnSoundTest: TButton;
|
||||
sgSAFiles: TStringGrid;
|
||||
sgSAName: TStringColumn;
|
||||
sgSAFile: TStringColumn;
|
||||
GroupBox24: TGroupBox;
|
||||
btnTextAdd: TButton;
|
||||
btnTextDel: TButton;
|
||||
edtTextName: TEdit;
|
||||
edtTextFileName: TEdit;
|
||||
btnTextOpen: TButton;
|
||||
sgTFiles: TStringGrid;
|
||||
scTFileName: TStringColumn;
|
||||
scTFileFile: TStringColumn;
|
||||
OpenDialog1: TOpenDialog;
|
||||
GroupBox2: TGroupBox;
|
||||
sgAIGen: TStringGrid;
|
||||
StringColumn1: TStringColumn;
|
||||
StringColumn2: TStringColumn;
|
||||
edtAIGenName: TEdit;
|
||||
edtAIGenRequest: TEdit;
|
||||
btnAIGenAdd: TButton;
|
||||
btnAIGenDel: TButton;
|
||||
btnAIGetTextUser: TButton;
|
||||
private
|
||||
{ Private declarations }
|
||||
public
|
||||
{ Public declarations }
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.fmx}
|
||||
|
||||
end.
|
||||
@@ -0,0 +1,87 @@
|
||||
object frLog: TfrLog
|
||||
Size.Width = 800.000000000000000000
|
||||
Size.Height = 535.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
object Panel1: TPanel
|
||||
Align = Top
|
||||
Size.Width = 800.000000000000000000
|
||||
Size.Height = 33.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 0
|
||||
object btnClear: TButton
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 8.000000000000000000
|
||||
TabOrder = 0
|
||||
Text = #1054#1095#1080#1089#1090#1080#1090#1100
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object chkWARNING: TCheckBox
|
||||
Position.X = 160.000000000000000000
|
||||
Position.Y = 8.000000000000000000
|
||||
Size.Width = 121.000000000000000000
|
||||
Size.Height = 19.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 1
|
||||
Text = #1055#1088#1077#1076#1091#1087#1088#1077#1078#1076#1077#1085#1080#1103
|
||||
end
|
||||
object chkERROR: TCheckBox
|
||||
Position.X = 289.000000000000000000
|
||||
Position.Y = 8.000000000000000000
|
||||
Size.Width = 72.000000000000000000
|
||||
Size.Height = 19.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 2
|
||||
Text = #1054#1096#1080#1073#1082#1080
|
||||
end
|
||||
object chkDEBUG: TCheckBox
|
||||
Position.X = 369.000000000000000000
|
||||
Position.Y = 8.000000000000000000
|
||||
TabOrder = 3
|
||||
Text = #1054#1090#1083#1072#1076#1082#1072
|
||||
end
|
||||
object chkINFO: TCheckBox
|
||||
Position.X = 96.000000000000000000
|
||||
Position.Y = 8.000000000000000000
|
||||
Size.Width = 56.000000000000000000
|
||||
Size.Height = 19.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 4
|
||||
Text = #1048#1085#1092#1086
|
||||
end
|
||||
end
|
||||
object sgLog: TStringGrid
|
||||
Align = Client
|
||||
CanFocus = True
|
||||
ClipChildren = True
|
||||
Size.Width = 800.000000000000000000
|
||||
Size.Height = 502.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 1
|
||||
RowCount = 0
|
||||
Viewport.Width = 796.000000000000000000
|
||||
Viewport.Height = 477.000000000000000000
|
||||
object StringColumn5: TStringColumn
|
||||
Header = #1044#1072#1090#1072
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
end
|
||||
object StringColumn1: TStringColumn
|
||||
Header = #1058#1080#1087
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
end
|
||||
object StringColumn2: TStringColumn
|
||||
Header = #1052#1086#1076#1091#1083#1100
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
Size.Width = 170.000000000000000000
|
||||
end
|
||||
object StringColumn3: TStringColumn
|
||||
Header = #1052#1077#1090#1086#1076
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
Size.Width = 170.000000000000000000
|
||||
end
|
||||
object StringColumn4: TStringColumn
|
||||
Header = #1057#1086#1086#1073#1097#1077#1085#1080#1077
|
||||
HeaderSettings.TextSettings.WordWrap = False
|
||||
Size.Width = 497.000000000000000000
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,35 @@
|
||||
unit fLog;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
|
||||
FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls,
|
||||
System.Rtti, FMX.Grid.Style, FMX.Grid, FMX.ScrollBox,
|
||||
FMX.Controls.Presentation;
|
||||
|
||||
type
|
||||
TfrLog = class(TFrame)
|
||||
Panel1: TPanel;
|
||||
btnClear: TButton;
|
||||
chkWARNING: TCheckBox;
|
||||
chkERROR: TCheckBox;
|
||||
chkDEBUG: TCheckBox;
|
||||
chkINFO: TCheckBox;
|
||||
sgLog: TStringGrid;
|
||||
StringColumn5: TStringColumn;
|
||||
StringColumn1: TStringColumn;
|
||||
StringColumn2: TStringColumn;
|
||||
StringColumn3: TStringColumn;
|
||||
StringColumn4: TStringColumn;
|
||||
private
|
||||
{ Private declarations }
|
||||
public
|
||||
{ Public declarations }
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.fmx}
|
||||
|
||||
end.
|
||||
@@ -0,0 +1,260 @@
|
||||
object frNotify: TfrNotify
|
||||
Size.Width = 919.000000000000000000
|
||||
Size.Height = 135.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
object chEnNotify: TSwitch
|
||||
IsChecked = False
|
||||
Position.X = 13.000000000000000000
|
||||
Position.Y = 8.000000000000000000
|
||||
Size.Width = 49.000000000000000000
|
||||
Size.Height = 20.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 3
|
||||
end
|
||||
object Label43: TLabel
|
||||
Position.X = 70.000000000000000000
|
||||
Position.Y = 10.000000000000000000
|
||||
Size.Width = 220.000000000000000000
|
||||
Size.Height = 17.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TextSettings.Trimming = None
|
||||
Text = #1059#1074#1077#1076#1086#1084#1083#1103#1090#1100' '#1086' '#1089#1086#1086#1073#1097#1077#1085#1080#1103#1093' '#1086#1090' '#1074#1089#1077#1093
|
||||
TabOrder = 4
|
||||
end
|
||||
object tbNotifyVolume: TTrackBar
|
||||
CanParentFocus = True
|
||||
Orientation = Horizontal
|
||||
Position.X = 320.000000000000000000
|
||||
Position.Y = 8.000000000000000000
|
||||
TabOrder = 5
|
||||
Value = 100.000000000000000000
|
||||
end
|
||||
object edtNotifyFileName: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 6
|
||||
Position.X = 428.000000000000000000
|
||||
Position.Y = 8.000000000000000000
|
||||
Size.Width = 156.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object btnNotifyOpen: TButton
|
||||
Position.X = 592.000000000000000000
|
||||
Position.Y = 8.000000000000000000
|
||||
Size.Width = 24.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 7
|
||||
Text = '...'
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnNotifyCheck: TButton
|
||||
Position.X = 624.000000000000000000
|
||||
Position.Y = 8.000000000000000000
|
||||
Size.Width = 24.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 8
|
||||
Text = '>'
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object cbNotifyFileAgain1: TCheckBox
|
||||
Position.X = 656.000000000000000000
|
||||
Position.Y = 41.000000000000000000
|
||||
Size.Width = 255.000000000000000000
|
||||
Size.Height = 19.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 29
|
||||
Text = #1048#1089#1087#1086#1083#1100#1079#1086#1074#1072#1090#1100' '#1092#1072#1081#1083' '#1086#1073#1097#1077#1075#1086' '#1086#1087#1086#1074#1077#1097#1077#1085#1080#1103
|
||||
end
|
||||
object btnNotifyCheckMod: TButton
|
||||
Position.X = 624.000000000000000000
|
||||
Position.Y = 38.000000000000000000
|
||||
Size.Width = 24.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 26
|
||||
Text = '>'
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnNotifyOpenMod: TButton
|
||||
Position.X = 592.000000000000000000
|
||||
Position.Y = 38.000000000000000000
|
||||
Size.Width = 24.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 24
|
||||
Text = '...'
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object edtNotifyFileNameMod: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 22
|
||||
Position.X = 428.000000000000000000
|
||||
Position.Y = 38.000000000000000000
|
||||
Size.Width = 156.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object tbNotifyVolumeMod: TTrackBar
|
||||
CanParentFocus = True
|
||||
Orientation = Horizontal
|
||||
Position.X = 320.000000000000000000
|
||||
Position.Y = 37.000000000000000000
|
||||
TabOrder = 20
|
||||
Value = 100.000000000000000000
|
||||
end
|
||||
object Label50: TLabel
|
||||
Position.X = 70.000000000000000000
|
||||
Position.Y = 35.000000000000000000
|
||||
Size.Width = 242.000000000000000000
|
||||
Size.Height = 17.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TextSettings.Trimming = None
|
||||
Text = #1059#1074#1077#1076#1086#1084#1083#1103#1090#1100' '#1086' '#1089#1086#1086#1073#1097#1077#1085#1080#1103#1093' '#1086#1090' '#1084#1086#1076#1077#1088#1072#1090#1086#1088#1086#1074
|
||||
TabOrder = 16
|
||||
end
|
||||
object chEnNotifyMod: TSwitch
|
||||
IsChecked = False
|
||||
Position.X = 13.000000000000000000
|
||||
Position.Y = 36.000000000000000000
|
||||
Size.Width = 49.000000000000000000
|
||||
Size.Height = 20.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 12
|
||||
end
|
||||
object chEnNotifyVip: TSwitch
|
||||
IsChecked = False
|
||||
Position.X = 13.000000000000000000
|
||||
Position.Y = 64.000000000000000000
|
||||
Size.Width = 49.000000000000000000
|
||||
Size.Height = 20.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 10
|
||||
end
|
||||
object Label51: TLabel
|
||||
Position.X = 70.000000000000000000
|
||||
Position.Y = 63.000000000000000000
|
||||
Size.Width = 220.000000000000000000
|
||||
Size.Height = 17.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TextSettings.Trimming = None
|
||||
Text = #1059#1074#1077#1076#1086#1084#1083#1103#1090#1100' '#1086' '#1089#1086#1086#1073#1097#1077#1085#1080#1103#1093' '#1086#1090' '#1074#1080#1087#1086#1074
|
||||
TabOrder = 13
|
||||
end
|
||||
object tbNotifyVolumeVip: TTrackBar
|
||||
CanParentFocus = True
|
||||
Orientation = Horizontal
|
||||
Position.X = 320.000000000000000000
|
||||
Position.Y = 65.000000000000000000
|
||||
TabOrder = 15
|
||||
Value = 100.000000000000000000
|
||||
end
|
||||
object edtNotifyFileNameVip: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 18
|
||||
Position.X = 428.000000000000000000
|
||||
Position.Y = 66.000000000000000000
|
||||
Size.Width = 156.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object btnNotifyOpenVip: TButton
|
||||
Position.X = 592.000000000000000000
|
||||
Position.Y = 64.000000000000000000
|
||||
Size.Width = 24.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 21
|
||||
Text = '...'
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnNotifyCheckVip: TButton
|
||||
Position.X = 624.000000000000000000
|
||||
Position.Y = 66.000000000000000000
|
||||
Size.Width = 24.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 25
|
||||
Text = '>'
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object cbNotifyFileAgain2: TCheckBox
|
||||
Position.X = 656.000000000000000000
|
||||
Position.Y = 68.000000000000000000
|
||||
Size.Width = 255.000000000000000000
|
||||
Size.Height = 19.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 28
|
||||
Text = #1048#1089#1087#1086#1083#1100#1079#1086#1074#1072#1090#1100' '#1092#1072#1081#1083' '#1086#1073#1097#1077#1075#1086' '#1086#1087#1086#1074#1077#1097#1077#1085#1080#1103
|
||||
end
|
||||
object cbNotifyFileAgain3: TCheckBox
|
||||
Position.X = 656.000000000000000000
|
||||
Position.Y = 97.000000000000000000
|
||||
Size.Width = 255.000000000000000000
|
||||
Size.Height = 19.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 27
|
||||
Text = #1048#1089#1087#1086#1083#1100#1079#1086#1074#1072#1090#1100' '#1092#1072#1081#1083' '#1086#1073#1097#1077#1075#1086' '#1086#1087#1086#1074#1077#1097#1077#1085#1080#1103
|
||||
end
|
||||
object btnNotifyCheckSub: TButton
|
||||
Position.X = 624.000000000000000000
|
||||
Position.Y = 94.000000000000000000
|
||||
Size.Width = 24.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 23
|
||||
Text = '>'
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnNotifyOpenSub: TButton
|
||||
Position.X = 592.000000000000000000
|
||||
Position.Y = 94.000000000000000000
|
||||
Size.Width = 24.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 19
|
||||
Text = '...'
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object edtNotifyFileNameSub: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 17
|
||||
Position.X = 428.000000000000000000
|
||||
Position.Y = 94.000000000000000000
|
||||
Size.Width = 156.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object tbNotifyVolumeSub: TTrackBar
|
||||
CanParentFocus = True
|
||||
Orientation = Horizontal
|
||||
Position.X = 320.000000000000000000
|
||||
Position.Y = 93.000000000000000000
|
||||
TabOrder = 14
|
||||
Value = 100.000000000000000000
|
||||
end
|
||||
object Label52: TLabel
|
||||
Position.X = 70.000000000000000000
|
||||
Position.Y = 91.000000000000000000
|
||||
Size.Width = 220.000000000000000000
|
||||
Size.Height = 17.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TextSettings.Trimming = None
|
||||
Text = #1059#1074#1077#1076#1086#1084#1083#1103#1090#1100' '#1086' '#1089#1086#1086#1073#1097#1077#1085#1080#1103#1093' '#1086#1090' '#1089#1072#1073#1086#1074
|
||||
TabOrder = 11
|
||||
end
|
||||
object chEnNotifySub: TSwitch
|
||||
IsChecked = False
|
||||
Position.X = 13.000000000000000000
|
||||
Position.Y = 92.000000000000000000
|
||||
Size.Width = 49.000000000000000000
|
||||
Size.Height = 20.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 9
|
||||
end
|
||||
object OpenDialog1: TOpenDialog
|
||||
Left = 448
|
||||
Top = 56
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,50 @@
|
||||
unit fNotify;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
|
||||
FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls,
|
||||
FMX.Edit, FMX.Controls.Presentation;
|
||||
|
||||
type
|
||||
TfrNotify = class(TFrame)
|
||||
chEnNotify: TSwitch;
|
||||
Label43: TLabel;
|
||||
tbNotifyVolume: TTrackBar;
|
||||
edtNotifyFileName: TEdit;
|
||||
btnNotifyOpen: TButton;
|
||||
btnNotifyCheck: TButton;
|
||||
cbNotifyFileAgain1: TCheckBox;
|
||||
btnNotifyCheckMod: TButton;
|
||||
btnNotifyOpenMod: TButton;
|
||||
edtNotifyFileNameMod: TEdit;
|
||||
tbNotifyVolumeMod: TTrackBar;
|
||||
Label50: TLabel;
|
||||
chEnNotifyMod: TSwitch;
|
||||
chEnNotifyVip: TSwitch;
|
||||
Label51: TLabel;
|
||||
tbNotifyVolumeVip: TTrackBar;
|
||||
edtNotifyFileNameVip: TEdit;
|
||||
btnNotifyOpenVip: TButton;
|
||||
btnNotifyCheckVip: TButton;
|
||||
cbNotifyFileAgain2: TCheckBox;
|
||||
cbNotifyFileAgain3: TCheckBox;
|
||||
btnNotifyCheckSub: TButton;
|
||||
btnNotifyOpenSub: TButton;
|
||||
edtNotifyFileNameSub: TEdit;
|
||||
tbNotifyVolumeSub: TTrackBar;
|
||||
Label52: TLabel;
|
||||
chEnNotifySub: TSwitch;
|
||||
OpenDialog1: TOpenDialog;
|
||||
private
|
||||
{ Private declarations }
|
||||
public
|
||||
{ Public declarations }
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.fmx}
|
||||
|
||||
end.
|
||||
@@ -0,0 +1,334 @@
|
||||
object frSettings: TfrSettings
|
||||
Size.Width = 650.000000000000000000
|
||||
Size.Height = 398.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
object GroupBox3: TGroupBox
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 9.000000000000000000
|
||||
Size.Width = 329.000000000000000000
|
||||
Size.Height = 304.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Text = 'Twitch'
|
||||
TabOrder = 0
|
||||
Top = 3
|
||||
object Label1: TLabel
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 24.000000000000000000
|
||||
Size.Width = 305.000000000000000000
|
||||
Size.Height = 13.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TextSettings.Trimming = None
|
||||
Text = #1048#1084#1103' '#1073#1086#1090#1072' ('#1080#1084#1103' '#1072#1082#1082#1072#1091#1085#1090#1072')'
|
||||
Left = 11
|
||||
Top = 24
|
||||
end
|
||||
object Label2: TLabel
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 74.000000000000000000
|
||||
Size.Width = 179.000000000000000000
|
||||
Size.Height = 13.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TextSettings.Trimming = None
|
||||
Text = 'API Token '#1041#1086#1090#1072
|
||||
Left = 11
|
||||
Top = 70
|
||||
end
|
||||
object Label3: TLabel
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 226.000000000000000000
|
||||
Size.Width = 177.000000000000000000
|
||||
Size.Height = 13.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TextSettings.Trimming = None
|
||||
Text = #1050#1072#1085#1072#1083
|
||||
Left = 11
|
||||
Top = 162
|
||||
end
|
||||
object Label22: TLabel
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 176.000000000000000000
|
||||
Size.Width = 177.000000000000000000
|
||||
Size.Height = 13.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TextSettings.Trimming = None
|
||||
Text = 'Client ID'
|
||||
Left = 11
|
||||
Top = 116
|
||||
end
|
||||
object edtBotName: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 0
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 45.000000000000000000
|
||||
Size.Width = 177.000000000000000000
|
||||
Size.Height = 21.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Left = 11
|
||||
Top = 43
|
||||
end
|
||||
object edtBotToken: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 1
|
||||
Password = True
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 92.000000000000000000
|
||||
Size.Width = 177.000000000000000000
|
||||
Size.Height = 21.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Left = 11
|
||||
Top = 89
|
||||
end
|
||||
object edtChannel: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 2
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 247.000000000000000000
|
||||
Size.Width = 177.000000000000000000
|
||||
Size.Height = 21.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Left = 11
|
||||
Top = 181
|
||||
end
|
||||
object btnGetToken: TButton
|
||||
Position.X = 193.000000000000000000
|
||||
Position.Y = 88.000000000000000000
|
||||
Size.Width = 128.000000000000000000
|
||||
Size.Height = 25.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 3
|
||||
Text = #1055#1086#1083#1091#1095#1080#1090#1100' Token'
|
||||
TextSettings.Trimming = None
|
||||
Left = 207
|
||||
Top = 87
|
||||
end
|
||||
object edtBotClientID: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
TabOrder = 5
|
||||
Password = True
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 197.000000000000000000
|
||||
Size.Width = 177.000000000000000000
|
||||
Size.Height = 21.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Left = 11
|
||||
Top = 135
|
||||
end
|
||||
object btnGetClientID: TButton
|
||||
Position.X = 193.000000000000000000
|
||||
Position.Y = 193.000000000000000000
|
||||
Size.Width = 128.000000000000000000
|
||||
Size.Height = 25.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 6
|
||||
Text = #1055#1086#1083#1091#1095#1080#1090#1100' Client-ID'
|
||||
TextSettings.Trimming = None
|
||||
Visible = False
|
||||
Left = 207
|
||||
Top = 133
|
||||
end
|
||||
object btnOpenStream: TButton
|
||||
Position.X = 193.000000000000000000
|
||||
Position.Y = 246.000000000000000000
|
||||
Size.Width = 128.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 35
|
||||
Text = #1054#1090#1082#1088#1099#1090#1100' '#1089#1090#1088#1080#1084
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnGetTokenStreamer: TButton
|
||||
Position.X = 193.000000000000000000
|
||||
Position.Y = 146.000000000000000000
|
||||
Size.Width = 128.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 36
|
||||
Text = #1055#1086#1083#1091#1095#1080#1090#1100' Token'
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object edtBotTokenStreamer: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 37
|
||||
Password = True
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 146.000000000000000000
|
||||
Size.Width = 177.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object Label53: TLabel
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 121.000000000000000000
|
||||
Size.Width = 179.000000000000000000
|
||||
Size.Height = 17.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TextSettings.Trimming = None
|
||||
Text = 'API Token '#1057#1090#1088#1080#1084#1077#1088#1072
|
||||
TabOrder = 38
|
||||
end
|
||||
object cbTTVAutoLogin: TCheckBox
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 276.000000000000000000
|
||||
Size.Width = 137.000000000000000000
|
||||
Size.Height = 19.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 4
|
||||
Text = #1040#1074#1090#1086#1087#1086#1076#1082#1083#1102#1095#1077#1085#1080#1077
|
||||
end
|
||||
end
|
||||
object GroupBox22: TGroupBox
|
||||
Position.X = 345.000000000000000000
|
||||
Position.Y = 8.000000000000000000
|
||||
Size.Width = 288.000000000000000000
|
||||
Size.Height = 305.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
Text = 'DonationAlerts'
|
||||
TabOrder = 1
|
||||
object btnDAGetCode: TButton
|
||||
Position.X = 200.000000000000000000
|
||||
Position.Y = 216.000000000000000000
|
||||
TabOrder = 45
|
||||
Text = #1055#1086#1083#1091#1095#1080#1090#1100
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object Label63: TLabel
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 24.000000000000000000
|
||||
TextSettings.Trimming = None
|
||||
Text = 'Client ID'
|
||||
TabOrder = 37
|
||||
end
|
||||
object edtDAClientID: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 40
|
||||
Password = True
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 49.000000000000000000
|
||||
Size.Width = 272.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object Label64: TLabel
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 79.000000000000000000
|
||||
TextSettings.Trimming = None
|
||||
Text = 'Client Secret'
|
||||
TabOrder = 38
|
||||
end
|
||||
object edtDAClientSecret: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 39
|
||||
Password = True
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 104.000000000000000000
|
||||
Size.Width = 272.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object Label65: TLabel
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 134.000000000000000000
|
||||
TextSettings.Trimming = None
|
||||
Text = 'Redirect URL'
|
||||
TabOrder = 41
|
||||
end
|
||||
object edtDARedirectURL: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 42
|
||||
Password = True
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 159.000000000000000000
|
||||
Size.Width = 272.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object edtDACode: TEdit
|
||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||
TabOrder = 43
|
||||
Password = True
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 214.000000000000000000
|
||||
Size.Width = 184.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
end
|
||||
object Label66: TLabel
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 189.000000000000000000
|
||||
TextSettings.Trimming = None
|
||||
Text = 'Code'
|
||||
TabOrder = 44
|
||||
end
|
||||
object btnDAStart: TButton
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 244.000000000000000000
|
||||
Size.Width = 121.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 46
|
||||
Text = #1055#1086#1076#1082#1083#1102#1095#1080#1090#1100#1089#1103
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnGetDADef: TButton
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 274.000000000000000000
|
||||
Size.Width = 209.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 47
|
||||
Text = #1055#1086#1083#1091#1095#1080#1090#1100' '#1076#1072#1085#1085#1099#1077' Donation Alerts'
|
||||
TextSettings.Trimming = None
|
||||
Visible = False
|
||||
end
|
||||
object cbDAAutoLogin: TCheckBox
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 274.000000000000000000
|
||||
Size.Width = 88.000000000000000000
|
||||
Size.Height = 19.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 4
|
||||
Text = #1040#1074#1090#1086#1083#1086#1075#1080#1085
|
||||
end
|
||||
end
|
||||
object btnOpenRomaning: TButton
|
||||
Position.X = 8.000000000000000000
|
||||
Position.Y = 321.000000000000000000
|
||||
Size.Width = 185.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 2
|
||||
Text = #1054#1090#1082#1088#1099#1090#1100' '#1087#1072#1087#1082#1091' '#1089' '#1085#1072#1089#1090#1088#1086#1081#1082#1072#1084#1080
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnImportSettings: TButton
|
||||
Position.X = 201.000000000000000000
|
||||
Position.Y = 321.000000000000000000
|
||||
Size.Width = 160.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 3
|
||||
Text = #1047#1072#1075#1088#1091#1079#1080#1090#1100' '#1089#1074#1086#1080' '#1085#1072#1089#1090#1088#1086#1081#1082#1080
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnExportSettings: TButton
|
||||
Position.X = 201.000000000000000000
|
||||
Position.Y = 351.000000000000000000
|
||||
Size.Width = 143.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 4
|
||||
Text = #1042#1099#1075#1088#1091#1079#1080#1090#1100' '#1085#1072#1089#1090#1088#1086#1081#1082#1080
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
object btnMaster: TButton
|
||||
Position.X = 440.000000000000000000
|
||||
Position.Y = 321.000000000000000000
|
||||
Size.Width = 193.000000000000000000
|
||||
Size.Height = 22.000000000000000000
|
||||
Size.PlatformDefault = False
|
||||
TabOrder = 7
|
||||
Text = #1047#1072#1087#1091#1089#1090#1080#1090#1100' '#1084#1072#1089#1090#1077#1088' '#1085#1072#1089#1090#1088#1086#1081#1082#1080
|
||||
TextSettings.Trimming = None
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,55 @@
|
||||
unit fSettings;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
|
||||
FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls,
|
||||
FMX.Controls.Presentation, FMX.Edit;
|
||||
|
||||
type
|
||||
TfrSettings = class(TFrame)
|
||||
GroupBox3: TGroupBox;
|
||||
Label1: TLabel;
|
||||
Label2: TLabel;
|
||||
Label3: TLabel;
|
||||
Label22: TLabel;
|
||||
edtBotName: TEdit;
|
||||
edtBotToken: TEdit;
|
||||
edtChannel: TEdit;
|
||||
btnGetToken: TButton;
|
||||
edtBotClientID: TEdit;
|
||||
btnGetClientID: TButton;
|
||||
btnOpenStream: TButton;
|
||||
btnGetTokenStreamer: TButton;
|
||||
edtBotTokenStreamer: TEdit;
|
||||
Label53: TLabel;
|
||||
GroupBox22: TGroupBox;
|
||||
btnDAGetCode: TButton;
|
||||
Label63: TLabel;
|
||||
edtDAClientID: TEdit;
|
||||
Label64: TLabel;
|
||||
edtDAClientSecret: TEdit;
|
||||
Label65: TLabel;
|
||||
edtDARedirectURL: TEdit;
|
||||
edtDACode: TEdit;
|
||||
Label66: TLabel;
|
||||
btnDAStart: TButton;
|
||||
btnGetDADef: TButton;
|
||||
cbDAAutoLogin: TCheckBox;
|
||||
cbTTVAutoLogin: TCheckBox;
|
||||
btnOpenRomaning: TButton;
|
||||
btnImportSettings: TButton;
|
||||
btnExportSettings: TButton;
|
||||
btnMaster: TButton;
|
||||
private
|
||||
{ Private declarations }
|
||||
public
|
||||
{ Public declarations }
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.fmx}
|
||||
|
||||
end.
|
||||
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 24 KiB |
@@ -0,0 +1,491 @@
|
||||
unit uDataBase;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
System.SysUtils, System.Classes, FireDAC.Comp.Client, FireDAC.Stan.Param,
|
||||
FMX.Grid, FireDAC.Stan.Def, FireDAC.Stan.Intf, FireDAC.Stan.Option,
|
||||
FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Pool,
|
||||
FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Phys.SQLite, FireDAC.Phys.SQLiteDef,
|
||||
FireDAC.Stan.ExprFuncs, FireDAC.Phys.SQLiteWrapper.Stat, FireDAC.VCLUI.Wait,
|
||||
FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt, Data.DB, FireDAC.Comp.DataSet,
|
||||
FireDAC.FMXUI.Wait, FireDAC.Comp.UI, uRecords, System.Generics.Collections;
|
||||
|
||||
type
|
||||
TSettingsDatabase = class
|
||||
|
||||
private
|
||||
FConnection: TFDConnection;
|
||||
procedure InitializeDatabase;
|
||||
function GetSetting(const Name: string): string;
|
||||
procedure SetSetting(const Name, Value: string);
|
||||
function GetColumnsDefinition(Grid: TStringGrid): string;
|
||||
function GetColumnsList(Grid: TStringGrid): string;
|
||||
function GetValuesPlaceholders(Grid: TStringGrid): string;
|
||||
function CheckTableExists(const TableName: string): Boolean;
|
||||
public
|
||||
FChannel: string;
|
||||
|
||||
constructor Create(const DatabasePath: string);
|
||||
destructor Destroy; override;
|
||||
|
||||
// Ìåòîäû äëÿ ðàáîòû ñ íàñòðîéêàìè
|
||||
function ReadSetting(const Name: string; Default: string = ''): string;
|
||||
procedure WriteSetting(const Name, Value: string);
|
||||
function getLoginData(): TLogin;
|
||||
|
||||
// Ìåòîäû äëÿ ðàáîòû ñ TStringGrid
|
||||
procedure SaveGridToTable(const TableName: string; Grid: TStringGrid);
|
||||
procedure LoadGridFromTable(const TableName: string; Grid: TStringGrid);
|
||||
|
||||
// Ìåòîäû äëÿ ðàáîòû ñ Users
|
||||
// procedure SaveUsers(const Users: array of User);
|
||||
procedure LoadUsers(var users: tlist<tuser>);
|
||||
|
||||
// Ìåòîäû äëÿ ðàáîòû ñ Ãðóïïîâûìè îòâåòàìè
|
||||
procedure addGroupResponse(Name, Respons: string);
|
||||
procedure getGroupResponse(aName: string; const lbResponse: Tstrings);
|
||||
procedure getGroupName(const lbName: Tstrings);
|
||||
procedure delGroupName(aName: string);
|
||||
procedure delGroupResponse(aName, aResponse: string);
|
||||
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
uses uGeneral;
|
||||
|
||||
constructor TSettingsDatabase.Create(const DatabasePath: string);
|
||||
begin
|
||||
FConnection := TFDConnection.Create(nil);
|
||||
try
|
||||
FConnection.DriverName := 'SQLite';
|
||||
FConnection.Params.Database := DatabasePath;
|
||||
FConnection.Connected := True;
|
||||
InitializeDatabase;
|
||||
except
|
||||
on E: Exception do
|
||||
begin
|
||||
FreeAndNil(FConnection);
|
||||
raise Exception.Create('Îøèáêà ïðè ïîäêëþ÷åíèè ê áàçå äàííûõ: ' +
|
||||
E.Message);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TSettingsDatabase.delGroupName(aName: string);
|
||||
var
|
||||
Query: TFDQuery;
|
||||
begin
|
||||
Query := TFDQuery.Create(nil);
|
||||
try
|
||||
Query.Connection := FConnection;
|
||||
Query.SQL.Text := 'delete FROM GroupResponse where Name = "' + aName + '"';
|
||||
Query.ExecSQL;
|
||||
finally
|
||||
Query.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TSettingsDatabase.delGroupResponse(aName, aResponse: string);
|
||||
var
|
||||
Query: TFDQuery;
|
||||
begin
|
||||
Query := TFDQuery.Create(nil);
|
||||
try
|
||||
Query.Connection := FConnection;
|
||||
Query.SQL.Text := 'delete FROM GroupResponse where Name = :name' +
|
||||
' and Response = :response';
|
||||
Query.Params.ParamByName('name').AsString := aName;
|
||||
Query.Params.ParamByName('response').AsString := aResponse;
|
||||
Query.ExecSQL;
|
||||
finally
|
||||
Query.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
destructor TSettingsDatabase.Destroy;
|
||||
begin
|
||||
if Assigned(FConnection) then
|
||||
FConnection.Connected := False;
|
||||
FreeAndNil(FConnection);
|
||||
inherited;
|
||||
end;
|
||||
|
||||
procedure TSettingsDatabase.InitializeDatabase;
|
||||
var
|
||||
FDQuery: TFDQuery;
|
||||
FieldExists: Boolean;
|
||||
begin
|
||||
// Ñîçäàåì òàáëèöó, åñëè îíà íå ñóùåñòâóåò
|
||||
FConnection.ExecSQL('CREATE TABLE IF NOT EXISTS params (' +
|
||||
' name TEXT PRIMARY KEY,' + ' value TEXT' + ');');
|
||||
// Ñîçäàåì òàáëèöó äëÿ ïîëüçîâàòåëåé, åñëè îíà íå ñóùåñòâóåò
|
||||
FConnection.ExecSQL('CREATE TABLE IF NOT EXISTS users (' +
|
||||
' id TEXT PRIMARY KEY,' + ' login TEXT,' + ' DisplayName TEXT,' +
|
||||
' created_at DATETIME,' + ' follow_at DATETIME,' + ' isVip TEXT,' +
|
||||
' isModer TEXT,' + ' isO TEXT,' + ' streamer TEXT' +
|
||||
|
||||
');');
|
||||
FDQuery := TFDQuery.Create(nil);
|
||||
try
|
||||
FDQuery.Connection := FConnection;
|
||||
FieldExists := False;
|
||||
FDQuery.SQL.Text := 'PRAGMA table_info(users)';
|
||||
FDQuery.Open;
|
||||
while not FDQuery.EOF do
|
||||
begin
|
||||
if FDQuery.FieldByName('name').AsString = 'streamer' then
|
||||
begin
|
||||
FieldExists := True;
|
||||
Break;
|
||||
end;
|
||||
FDQuery.Next;
|
||||
end;
|
||||
FDQuery.Close;
|
||||
if not FieldExists then
|
||||
begin
|
||||
FConnection.ExecSQL('ALTER TABLE users ADD COLUMN streamer TEXT');
|
||||
end;
|
||||
finally
|
||||
FDQuery.Free;
|
||||
end;
|
||||
|
||||
FConnection.ExecSQL
|
||||
('CREATE TABLE IF NOT EXISTS GroupResponse (ID INTEGER PRIMARY KEY, Name TEXT, Response TEXT);');
|
||||
|
||||
end;
|
||||
|
||||
{ procedure TSettingsDatabase.SaveUsers(const Users: array of User);
|
||||
var
|
||||
Query: TFDQuery;
|
||||
UserItem: User;
|
||||
s: string;
|
||||
begin
|
||||
if Length(Users) < 1 then
|
||||
exit;
|
||||
// Âñòàâëÿåì äàííûå èç ìàññèâà ïîëüçîâàòåëåé â òàáëèöó
|
||||
Query := TFDQuery.Create(nil);
|
||||
try
|
||||
Query.Connection := FConnection;
|
||||
for UserItem in Users do
|
||||
begin
|
||||
Query.SQL.Text :=
|
||||
'INSERT OR REPLACE INTO users (id, login, DisplayName, created_at, follow_at, isVip, isModer, isO, streamer) '
|
||||
+ 'VALUES (:id, :login, :DisplayName, :created_at, :follow_at, :isVip, :isModer, :isO, :streamer);';
|
||||
Query.ParamByName('id').AsString := UserItem.id;
|
||||
Query.ParamByName('login').AsString := UserItem.login;
|
||||
Query.ParamByName('DisplayName').AsString := UserItem.DisplayName;
|
||||
Query.ParamByName('created_at').AsDateTime := UserItem.created_at;
|
||||
Query.ParamByName('follow_at').AsDateTime := UserItem.follow_at;
|
||||
Query.ParamByName('streamer').AsString := FChannel;
|
||||
|
||||
if UserItem.isVip then
|
||||
s := 'True'
|
||||
else
|
||||
s := 'False';
|
||||
Query.ParamByName('isVip').AsString := s;
|
||||
if UserItem.isModer then
|
||||
s := 'True'
|
||||
else
|
||||
s := 'False';
|
||||
Query.ParamByName('isModer').AsString := s;
|
||||
if UserItem.isO then
|
||||
s := 'True'
|
||||
else
|
||||
s := 'False';
|
||||
Query.ParamByName('isO').AsString := s;
|
||||
Query.ExecSQL;
|
||||
end;
|
||||
finally
|
||||
Query.Free;
|
||||
end;
|
||||
end; }
|
||||
|
||||
procedure TSettingsDatabase.LoadUsers(var users: tlist<tuser>);
|
||||
var
|
||||
Query: TFDQuery;
|
||||
UserItem: tuser;
|
||||
|
||||
begin
|
||||
|
||||
Query := TFDQuery.Create(nil);
|
||||
try
|
||||
Query.Connection := FConnection;
|
||||
Query.SQL.Text := 'SELECT * FROM users WHERE streamer = :streamer';
|
||||
Query.ParamByName('streamer').AsString := FChannel;
|
||||
Query.Open;
|
||||
|
||||
while not Query.EOF do
|
||||
begin
|
||||
UserItem.id := Query.FieldByName('id').AsString;
|
||||
UserItem.login := Query.FieldByName('login').AsString;
|
||||
UserItem.DisplayName := Query.FieldByName('DisplayName').AsString;
|
||||
UserItem.created_at := Query.FieldByName('created_at').AsDateTime;
|
||||
UserItem.follow_at := Query.FieldByName('follow_at').AsDateTime;
|
||||
UserItem.isVip := Query.FieldByName('isVip').AsString = 'True';
|
||||
UserItem.isModer := Query.FieldByName('isModer').AsString = 'True';
|
||||
UserItem.isO := Query.FieldByName('isO').AsString = 'True';
|
||||
UserItem.isO_today := False;
|
||||
users.Add(UserItem);
|
||||
Query.Next;
|
||||
end;
|
||||
|
||||
finally
|
||||
Query.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TSettingsDatabase.GetColumnsDefinition(Grid: TStringGrid): string;
|
||||
var
|
||||
Col: Integer;
|
||||
begin
|
||||
Result := '';
|
||||
for Col := 0 to Grid.ColumnCount - 1 do
|
||||
begin
|
||||
if Result <> '' then
|
||||
Result := Result + ', ';
|
||||
Result := Result + 'col' + IntToStr(Col) + ' TEXT';
|
||||
end;
|
||||
end;
|
||||
|
||||
function TSettingsDatabase.GetColumnsList(Grid: TStringGrid): string;
|
||||
var
|
||||
Col: Integer;
|
||||
begin
|
||||
Result := '';
|
||||
for Col := 0 to Grid.ColumnCount - 1 do
|
||||
begin
|
||||
if Result <> '' then
|
||||
Result := Result + ', ';
|
||||
Result := Result + 'col' + IntToStr(Col);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TSettingsDatabase.getGroupName(const lbName: Tstrings);
|
||||
var
|
||||
Query: TFDQuery;
|
||||
begin
|
||||
Query := TFDQuery.Create(nil);
|
||||
try
|
||||
Query.Connection := FConnection;
|
||||
|
||||
lbName.Clear;
|
||||
Query.SQL.Text := 'SELECT DISTINCT Name FROM GroupResponse';
|
||||
Query.Open;
|
||||
while not Query.EOF do
|
||||
begin
|
||||
lbName.Add(Query.FieldByName('Name').AsString);
|
||||
Query.Next;
|
||||
end;
|
||||
finally
|
||||
Query.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TSettingsDatabase.getGroupResponse(aName: string;
|
||||
const lbResponse: Tstrings);
|
||||
var
|
||||
Query: TFDQuery;
|
||||
begin
|
||||
Query := TFDQuery.Create(nil);
|
||||
try
|
||||
Query.Connection := FConnection;
|
||||
|
||||
lbResponse.Clear;
|
||||
Query.SQL.Text := 'SELECT * FROM GroupResponse WHERE name=:TableName';
|
||||
Query.ParamByName('TableName').AsString := aName;
|
||||
Query.Open;
|
||||
while not Query.EOF do
|
||||
begin
|
||||
lbResponse.Add(Query.FieldByName('Response').AsString);
|
||||
Query.Next;
|
||||
end;
|
||||
finally
|
||||
Query.Free;
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
function TSettingsDatabase.getLoginData: TLogin;
|
||||
begin
|
||||
Result.TTV_Token_Bot := ReadSetting('edtBotToken');
|
||||
Result.TTV_Token_Strimer := ReadSetting('edtBotTokenStreamer');
|
||||
Result.TTV_Name_Bot := ReadSetting('edtBotName');
|
||||
Result.TTV_Name_Strimer := ReadSetting('edtChannel');
|
||||
Result.TTV_ClientID := ReadSetting('edtBotClientID');
|
||||
|
||||
Result.DA_ClientID := ReadSetting('edtDAClientID');
|
||||
Result.DA_Client_Sictert := ReadSetting('edtDAClientSecret');
|
||||
Result.DA_RedirectURL := ReadSetting('edtDARedirectURL');
|
||||
Result.DA_Code := ReadSetting('edtDACode');
|
||||
|
||||
Result.AI_Gigachat_ClientID := ReadSetting('edtGPTClientID');
|
||||
Result.AI_Gigachat_AutorizationCode := ReadSetting('edtGPTAC');
|
||||
Result.AI_ChatGPT_Token := ReadSetting('edtGPTATChatGPT');
|
||||
Result.AI_DeepSeek_Token := ReadSetting('edtGPTATDeepSeek');
|
||||
end;
|
||||
|
||||
function TSettingsDatabase.GetValuesPlaceholders(Grid: TStringGrid): string;
|
||||
var
|
||||
Col: Integer;
|
||||
begin
|
||||
Result := '';
|
||||
for Col := 0 to Grid.ColumnCount - 1 do
|
||||
begin
|
||||
if Result <> '' then
|
||||
Result := Result + ', ';
|
||||
Result := Result + ':col' + IntToStr(Col);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TSettingsDatabase.addGroupResponse(Name, Respons: string);
|
||||
var
|
||||
Query: TFDQuery;
|
||||
begin
|
||||
Query := TFDQuery.Create(nil);
|
||||
try
|
||||
Query.Connection := FConnection;
|
||||
Query.SQL.Text :=
|
||||
Format('INSERT INTO GroupResponse (Name, Response) VALUES (''%s'', ''%s'')',
|
||||
[Name, Respons]);
|
||||
Query.ExecSQL;
|
||||
finally
|
||||
Query.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TSettingsDatabase.CheckTableExists(const TableName: string): Boolean;
|
||||
var
|
||||
Query: TFDQuery;
|
||||
begin
|
||||
Result := False;
|
||||
Query := TFDQuery.Create(nil);
|
||||
try
|
||||
Query.Connection := FConnection;
|
||||
Query.SQL.Text :=
|
||||
'SELECT COUNT(*) FROM sqlite_master WHERE type=''table'' AND name=:TableName';
|
||||
Query.ParamByName('TableName').AsString := TableName;
|
||||
Query.Open;
|
||||
Result := (Query.Fields[0].AsInteger > 0);
|
||||
finally
|
||||
Query.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TSettingsDatabase.LoadGridFromTable(const TableName: string;
|
||||
Grid: TStringGrid);
|
||||
var
|
||||
Query: TFDQuery;
|
||||
Col, Row: Integer;
|
||||
begin
|
||||
Query := TFDQuery.Create(nil);
|
||||
try
|
||||
Query.Connection := FConnection;
|
||||
|
||||
// Ïðîâåðèòü íàëè÷èå òàáëèöû
|
||||
if not CheckTableExists(TableName) then
|
||||
begin
|
||||
// Òàáëèöà íå ñóùåñòâóåò, âûõîäèì èç ïðîöåäóðû
|
||||
exit;
|
||||
end;
|
||||
|
||||
Query.SQL.Text := 'SELECT * FROM ' + TableName;
|
||||
Query.Open;
|
||||
|
||||
// Î÷èùàåì Grid
|
||||
Grid.RowCount := 0;
|
||||
|
||||
// Çàïîëíÿåì Grid äàííûìè èç òàáëèöû
|
||||
while not Query.EOF do
|
||||
begin
|
||||
Row := Grid.RowCount;
|
||||
Grid.RowCount := Grid.RowCount + 1;
|
||||
|
||||
for Col := 0 to Grid.ColumnCount - 1 do
|
||||
begin
|
||||
Grid.Cells[Col, Row] := Query.FieldByName('col' + IntToStr(Col)
|
||||
).AsString;
|
||||
end;
|
||||
|
||||
Query.Next;
|
||||
end;
|
||||
finally
|
||||
Query.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TSettingsDatabase.SaveGridToTable(const TableName: string;
|
||||
Grid: TStringGrid);
|
||||
var
|
||||
Query: TFDQuery;
|
||||
Col, Row: Integer;
|
||||
begin
|
||||
// Óäàëÿåì ñòàðóþ òàáëèöó, åñëè îíà ñóùåñòâóåò
|
||||
FConnection.ExecSQL('DROP TABLE IF EXISTS ' + TableName);
|
||||
|
||||
// Ñîçäàåì íîâóþ òàáëèöó
|
||||
FConnection.ExecSQL('CREATE TABLE ' + TableName + ' (' +
|
||||
' id INTEGER PRIMARY KEY AUTOINCREMENT,' + ' ' +
|
||||
GetColumnsDefinition(Grid) + ');');
|
||||
|
||||
// Âñòàâëÿåì äàííûå èç Grid â òàáëèöó
|
||||
Query := TFDQuery.Create(nil);
|
||||
try
|
||||
Query.Connection := FConnection;
|
||||
for Row := 0 to Grid.RowCount - 1 do
|
||||
begin
|
||||
Query.SQL.Text := 'INSERT INTO ' + TableName + ' (' + GetColumnsList(Grid)
|
||||
+ ') VALUES (' + GetValuesPlaceholders(Grid) + ')';
|
||||
for Col := 0 to Grid.ColumnCount - 1 do
|
||||
begin
|
||||
Query.ParamByName('col' + IntToStr(Col)).AsString :=
|
||||
Grid.Cells[Col, Row];
|
||||
end;
|
||||
Query.ExecSQL;
|
||||
end;
|
||||
finally
|
||||
Query.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TSettingsDatabase.GetSetting(const Name: string): string;
|
||||
var
|
||||
Query: TFDQuery;
|
||||
begin
|
||||
Query := TFDQuery.Create(nil);
|
||||
try
|
||||
Query.Connection := FConnection;
|
||||
Query.SQL.Text := 'SELECT value FROM params WHERE name = :name';
|
||||
Query.ParamByName('name').AsString := Name;
|
||||
Query.Open;
|
||||
if not Query.IsEmpty then
|
||||
Result := Query.FieldByName('value').AsString
|
||||
else
|
||||
Result := '';
|
||||
finally
|
||||
Query.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TSettingsDatabase.SetSetting(const Name, Value: string);
|
||||
begin
|
||||
FConnection.ExecSQL
|
||||
('INSERT OR REPLACE INTO params (name, value) VALUES (:name, :value)',
|
||||
[Name, Value]);
|
||||
end;
|
||||
|
||||
function TSettingsDatabase.ReadSetting(const Name: string;
|
||||
Default: string = ''): string;
|
||||
begin
|
||||
Result := GetSetting(Name);
|
||||
if Result = '' then
|
||||
Result := Default;
|
||||
end;
|
||||
|
||||
procedure TSettingsDatabase.WriteSetting(const Name, Value: string);
|
||||
begin
|
||||
SetSetting(Name, Value);
|
||||
end;
|
||||
|
||||
end.
|
||||
@@ -0,0 +1,455 @@
|
||||
unit uGeneral;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
System.SysUtils, System.Types, System.UITypes, System.Classes,
|
||||
System.Variants,
|
||||
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.TabControl,
|
||||
FMX.Controls.Presentation, FMX.StdCtrls, System.ImageList, FMX.ImgList,
|
||||
FMX.Styles,
|
||||
fSettings, fAI, fNotify, fAutoActions, fChatOBS, FMX.ListBox, fLog, uRecords,
|
||||
System.IOUtils, fCommands, uDataBase, FMX.Edit, FMX.Colors, FMX.SpinBox,
|
||||
windows;
|
||||
|
||||
type
|
||||
TForm1 = class(TForm)
|
||||
V: TTabControl;
|
||||
TabItem1: TTabItem;
|
||||
TabItem2: TTabItem;
|
||||
TabItem3: TTabItem;
|
||||
TabItem4: TTabItem;
|
||||
fSettings: TfrSettings;
|
||||
ImageList1: TImageList;
|
||||
TabItem5: TTabItem;
|
||||
Panel1: TPanel;
|
||||
btnConnecting: TButton;
|
||||
Label2: TLabel;
|
||||
Label3: TLabel;
|
||||
Label5: TLabel;
|
||||
Label6: TLabel;
|
||||
Label7: TLabel;
|
||||
Label8: TLabel;
|
||||
aiConnecting: TAniIndicator;
|
||||
Label9: TLabel;
|
||||
Label10: TLabel;
|
||||
Label11: TLabel;
|
||||
Label12: TLabel;
|
||||
frAI1: TfrAI;
|
||||
TabItem6: TTabItem;
|
||||
TabItem7: TTabItem;
|
||||
TabItem8: TTabItem;
|
||||
TabItem9: TTabItem;
|
||||
frNotify1: TfrNotify;
|
||||
Label1: TLabel;
|
||||
Label4: TLabel;
|
||||
Label13: TLabel;
|
||||
Label14: TLabel;
|
||||
frAutoActions1: TfrAutoActions;
|
||||
frChatOBS1: TfrChatOBS;
|
||||
frLog1: TfrLog;
|
||||
cbTheme: TComboBox;
|
||||
Label15: TLabel;
|
||||
frCommands1: TfrCommands;
|
||||
procedure Label14DblClick(Sender: TObject);
|
||||
procedure Label13DblClick(Sender: TObject);
|
||||
procedure Label4DblClick(Sender: TObject);
|
||||
procedure cbThemeChange(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
private
|
||||
{ Private declarations }
|
||||
procedure ReadDB();
|
||||
public
|
||||
{ Public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
Form1: TForm1;
|
||||
myConst: TConst;
|
||||
db: TSettingsDatabase;
|
||||
appconst: TBotAppCfg;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.fmx}
|
||||
|
||||
procedure TForm1.cbThemeChange(Sender: TObject);
|
||||
begin
|
||||
cbTheme.ItemIndex := cbTheme.Items.IndexOf(cbTheme.text);
|
||||
if cbTheme.ItemIndex <> -1 then
|
||||
TStyleManager.SetStyleFromFile(myConst.stlPath + cbTheme.text);
|
||||
// db.WriteSetting('cbTheme', inttostr(cbTheme.ItemIndex));
|
||||
end;
|
||||
|
||||
procedure TForm1.FormCreate(Sender: TObject);
|
||||
var
|
||||
Path: string;
|
||||
SearchRec: TSearchRec;
|
||||
|
||||
function GetPathToTestExe: string; // âåðíåò ïàïêó romaming
|
||||
begin
|
||||
Result := GetEnvironmentVariable('APPDATA');
|
||||
if Result <> '' then
|
||||
Result := IncludeTrailingPathDelimiter(Result);
|
||||
end;
|
||||
|
||||
begin
|
||||
|
||||
myConst.GeneralPath := ExtractFilePath(ParamStr(0));
|
||||
myConst.AppDataPath := GetPathToTestExe + 'TTW_Bot\';
|
||||
|
||||
if not DirectoryExists(myConst.AppDataPath) then
|
||||
CreateDir(myConst.AppDataPath);
|
||||
|
||||
myConst.DBPath := myConst.AppDataPath + 'settings.db';
|
||||
|
||||
if not DirectoryExists(myConst.AppDataPath + 'fonts') then
|
||||
CreateDir(myConst.AppDataPath + 'fonts');
|
||||
myConst.fontsPath := myConst.AppDataPath + 'fonts\';
|
||||
|
||||
if not DirectoryExists(myConst.AppDataPath + 'imgs') then
|
||||
CreateDir(myConst.AppDataPath + 'imgs');
|
||||
myConst.imgsPath := myConst.AppDataPath + 'imgs\';
|
||||
|
||||
if not DirectoryExists(myConst.AppDataPath + 'sounds') then
|
||||
CreateDir(myConst.AppDataPath + 'sounds');
|
||||
myConst.soundsPath := myConst.AppDataPath + 'sounds\';
|
||||
|
||||
if not DirectoryExists(myConst.AppDataPath + 'stl') then
|
||||
CreateDir(myConst.AppDataPath + 'stl');
|
||||
myConst.stlPath := myConst.AppDataPath + 'stl\';
|
||||
|
||||
if not DirectoryExists(myConst.AppDataPath + 'ytSongs') then
|
||||
CreateDir(myConst.AppDataPath + 'ytSongs');
|
||||
myConst.ytSongsPath := myConst.AppDataPath + 'ytSongs\';
|
||||
|
||||
myConst.PublicPlay := myConst.GeneralPath + 'PublicPlay.exe';
|
||||
myConst.SilentPlay := myConst.GeneralPath + 'SilentPlayer.exe';
|
||||
myConst.ytPlay := myConst.GeneralPath + 'Player.exe';
|
||||
myConst.cfg1 := myConst.GeneralPath + 'botapp.cfg';
|
||||
|
||||
db := TSettingsDatabase.Create(myConst.DBPath);
|
||||
|
||||
ReadDB;
|
||||
|
||||
for Path in TDirectory.GetFiles(myConst.stlPath) do
|
||||
cbTheme.Items.Add(ExtractFileName(Path));
|
||||
cbTheme.ItemIndex := strtoint(db.ReadSetting('cbTheme', '-1'));
|
||||
|
||||
end;
|
||||
|
||||
procedure TForm1.Label13DblClick(Sender: TObject);
|
||||
begin
|
||||
// https://www.twitch.tv/kuznecogr
|
||||
end;
|
||||
|
||||
procedure TForm1.Label14DblClick(Sender: TObject);
|
||||
begin
|
||||
// https://www.flaticon.com/ru/authors/karacis
|
||||
|
||||
end;
|
||||
|
||||
procedure TForm1.Label4DblClick(Sender: TObject);
|
||||
begin
|
||||
// https://www.twitch.tv/incadence
|
||||
end;
|
||||
|
||||
procedure TForm1.ReadDB;
|
||||
var
|
||||
I: Integer;
|
||||
c: TComponent;
|
||||
sl: TStringList;
|
||||
|
||||
SavedColor: TAlphaColor;
|
||||
|
||||
ColorStr: string;
|
||||
|
||||
function XorDecryptToStrings(const InputFile, Key: string): TStrings;
|
||||
var
|
||||
InStream: TFileStream;
|
||||
MemStream: TMemoryStream;
|
||||
KeyBytes: TBytes;
|
||||
KeyLen, KeyIndex: Integer;
|
||||
B: Byte;
|
||||
begin
|
||||
// Ïðåîáðàçóåì êëþ÷ â áàéòû ñ èñïîëüçîâàíèåì ANSI êîäèðîâêè
|
||||
KeyBytes := TEncoding.ANSI.GetBytes(Key);
|
||||
KeyLen := Length(KeyBytes);
|
||||
if KeyLen = 0 then
|
||||
raise Exception.Create('Êëþ÷ íå ìîæåò áûòü ïóñòûì');
|
||||
|
||||
InStream := TFileStream.Create(InputFile, fmOpenRead);
|
||||
try
|
||||
MemStream := TMemoryStream.Create;
|
||||
try
|
||||
KeyIndex := 0;
|
||||
// Ðàñøèôðîâûâàåì äàííûå è çàïèñûâàåì â ïîòîê â ïàìÿòè
|
||||
while InStream.Position < InStream.Size do
|
||||
begin
|
||||
InStream.ReadBuffer(B, 1);
|
||||
B := B xor KeyBytes[KeyIndex];
|
||||
MemStream.WriteBuffer(B, 1);
|
||||
KeyIndex := (KeyIndex + 1) mod KeyLen;
|
||||
end;
|
||||
// Ïðåîáðàçóåì äàííûå èç ïîòîêà â TStrings
|
||||
MemStream.Position := 0; // Ñáðàñûâàåì ïîçèöèþ äëÿ ÷òåíèÿ
|
||||
Result := TStringList.Create;
|
||||
try
|
||||
// Èñïîëüçóåì ANSI êîäèðîâêó äëÿ ïðåîáðàçîâàíèÿ áàéòîâ â ñòðîêó
|
||||
Result.LoadFromStream(MemStream, TEncoding.ANSI);
|
||||
except
|
||||
//  ñëó÷àå îøèáêè îñâîáîæäàåì ðåñóðñû è ïðîáðàñûâàåì èñêëþ÷åíèå
|
||||
Result.Free;
|
||||
raise;
|
||||
end;
|
||||
finally
|
||||
MemStream.Free;
|
||||
end;
|
||||
finally
|
||||
InStream.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
for I := 0 to fSettings.ComponentCount - 1 do
|
||||
begin
|
||||
c := fSettings.components[I];
|
||||
if c is TEdit then
|
||||
begin
|
||||
TEdit(c).text := db.ReadSetting(TEdit(c).Name);
|
||||
end;
|
||||
if c is TCheckBox then
|
||||
begin
|
||||
TCheckBox(c).IsChecked := (db.ReadSetting(TCheckBox(c).Name) = 'True');
|
||||
end;
|
||||
end;
|
||||
db.FChannel := fSettings.edtChannel.text;
|
||||
|
||||
db.LoadGridFromTable('sgRandomInt', frCommands1.sgRandomInt);
|
||||
db.LoadGridFromTable('sgCommands', frCommands1.sgCommands);
|
||||
db.LoadGridFromTable('sgSAFiles', frCommands1.sgSAFiles);
|
||||
db.LoadGridFromTable('sgTFiles', frCommands1.sgTFiles);
|
||||
db.LoadGridFromTable('sgAIGen', frCommands1.sgAIGen);
|
||||
|
||||
db.getGroupName(frCommands1.lbRandomGroup.Items);
|
||||
|
||||
if FileExists(myConst.cfg1) then
|
||||
begin
|
||||
|
||||
sl := TStringList.Create;
|
||||
|
||||
try
|
||||
sl.Assign(XorDecryptToStrings(myConst.cfg1, 'fgvasrgEFAXFAFAS'));
|
||||
for I := 0 to sl.Count - 1 do
|
||||
begin
|
||||
var
|
||||
eqPos := Pos('=', sl[I]);
|
||||
if eqPos > 0 then
|
||||
begin
|
||||
var
|
||||
Key := Trim(Copy(sl[I], 1, eqPos - 1));
|
||||
var
|
||||
Value := Trim(Copy(sl[I], eqPos + 1, MaxInt));
|
||||
|
||||
// Ðàñïðåäåëÿåì çíà÷åíèÿ ïî ïåðåìåííûì
|
||||
if Key = 'k1' then
|
||||
begin
|
||||
appconst.TTV_ClientID := Value;
|
||||
end
|
||||
else if Key = 'k2' then
|
||||
begin
|
||||
appconst.AI_GigaChat_AC := Value;
|
||||
end
|
||||
else if Key = 'k3' then
|
||||
begin
|
||||
appconst.AI_GigaChat_ClientID := Value;
|
||||
end
|
||||
else if Key = 'k4' then
|
||||
begin
|
||||
appconst.AI_ChatGPT_Token := Value;
|
||||
end
|
||||
else if Key = 'k5' then
|
||||
begin
|
||||
appconst.AI_DeepSeec_Token := Value;
|
||||
end
|
||||
else if Key = 'k6' then
|
||||
begin
|
||||
appconst.DA_ClientID := Value;
|
||||
end
|
||||
else if Key = 'k7' then
|
||||
begin
|
||||
appconst.DA_Sicret := Value;
|
||||
end
|
||||
else if Key = 'k8' then
|
||||
begin
|
||||
appconst.DA_URL := Value;
|
||||
end
|
||||
end;
|
||||
end;
|
||||
if appconst.TTV_ClientID <> '' then
|
||||
begin
|
||||
fSettings.btnGetClientID.Visible := True;
|
||||
end;
|
||||
if ((appconst.AI_GigaChat_AC <> '') and (appconst.AI_GigaChat_ClientID <>
|
||||
'')) or (appconst.AI_ChatGPT_Token <> '') or
|
||||
(appconst.AI_DeepSeec_Token <> '') then
|
||||
begin
|
||||
frAI1.btnGetAIDef.Visible := True;
|
||||
end;
|
||||
if ((appconst.DA_ClientID <> '') and (appconst.DA_Sicret <> '') and
|
||||
(appconst.DA_URL <> '')) then
|
||||
begin
|
||||
fSettings.btnGetDADef.Visible := True;
|
||||
end;
|
||||
|
||||
finally
|
||||
sl.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
for I := 0 to frChatOBS1.ComponentCount - 1 do
|
||||
begin
|
||||
c := frChatOBS1.components[I];
|
||||
if c is TComboBox then
|
||||
begin
|
||||
TComboBox(c).ItemIndex :=
|
||||
strtoint(db.ReadSetting(TComboBox(c).Name, '0'));
|
||||
end;
|
||||
if c is TColorComboBox then
|
||||
begin
|
||||
TColorComboBox(c).ItemIndex :=
|
||||
strtoint(db.ReadSetting(TComboBox(c).Name, '147'));
|
||||
end;
|
||||
if c is TSpinBox then
|
||||
begin
|
||||
if TSpinBox(c).Name = 'sbWebServerPort' then
|
||||
TSpinBox(c).text := db.ReadSetting(TSpinBox(c).Name, '8080');
|
||||
TSpinBox(c).text := db.ReadSetting(TSpinBox(c).Name, '1');
|
||||
end;
|
||||
if c is TCheckBox then
|
||||
begin
|
||||
TCheckBox(c).IsChecked := db.ReadSetting(TCheckBox(c).Name, '0') = '1';
|
||||
end;
|
||||
end;
|
||||
ColorStr := db.ReadSetting('cpStyleBlockColor', 'FF000000');
|
||||
if TryStrToUInt('$' + ColorStr, Cardinal(SavedColor)) then
|
||||
frChatOBS1.cpStyleBlockColor.Color := SavedColor
|
||||
else
|
||||
frChatOBS1.cpStyleBlockColor.Color := TAlphaColorRec.Black;
|
||||
|
||||
if not DirectoryExists(myConst.fontsPath) then
|
||||
CreateDirectory(PChar(myConst.fontsPath), 0);
|
||||
var
|
||||
n := 1;
|
||||
var
|
||||
cDir := myConst.fontsPath; // Èñêàòü â ïàïêå ñ ïðîãðàììîé
|
||||
var
|
||||
FileName := '*.*'; // Èùåì âñå ôàéëû
|
||||
ChDir(cDir); // âîéòè â êàòàëîã
|
||||
var
|
||||
SearchRec: TSearchRec;
|
||||
if FindFirst(FileName, faArchive, SearchRec) = 0 then
|
||||
repeat
|
||||
if (SearchRec.Attr and faAnyFile) = SearchRec.Attr then
|
||||
begin
|
||||
frChatOBS1.cbFontStyleDefault.Items.Add(SearchRec.Name);
|
||||
Inc(n);
|
||||
end;
|
||||
until FindNext(SearchRec) <> 0;
|
||||
ChDir('..');
|
||||
|
||||
for I := 0 to frNotify1.ComponentCount - 1 do
|
||||
begin
|
||||
c := frNotify1.components[I];
|
||||
if c is TEdit then
|
||||
begin
|
||||
TEdit(c).text := db.ReadSetting(TEdit(c).Name);
|
||||
end;
|
||||
if c is TCheckBox then
|
||||
begin
|
||||
TCheckBox(c).IsChecked := (db.ReadSetting(TCheckBox(c).Name) = 'True');
|
||||
end;
|
||||
if c is TSwitch then
|
||||
begin
|
||||
TSwitch(c).IsChecked := (db.ReadSetting(TSwitch(c).Name) = 'True');
|
||||
end;
|
||||
if c is TTrackBar then
|
||||
begin
|
||||
TTrackBar(c).Value := strtoint(db.ReadSetting(TTrackBar(c).Name, '100'));
|
||||
end;
|
||||
end;
|
||||
var
|
||||
ii: Integer;
|
||||
for I := 0 to frAI1.ComponentCount - 1 do
|
||||
begin
|
||||
c := frAI1.components[I];
|
||||
if c is TEdit then
|
||||
begin
|
||||
TEdit(c).text := db.ReadSetting(TEdit(c).Name);
|
||||
end;
|
||||
if c is TCheckBox then
|
||||
begin
|
||||
TCheckBox(c).IsChecked := db.ReadSetting(TCheckBox(c).Name) = '1';
|
||||
end;
|
||||
|
||||
end;
|
||||
ii := strtoint(db.ReadSetting('aiIndex', '0'));
|
||||
|
||||
case ii of
|
||||
0:
|
||||
begin
|
||||
frAI1.rbGC.IsChecked := True;
|
||||
frAI1.Label45.text := 'ClientID';
|
||||
frAI1.Label47.text := 'Autorization Code';
|
||||
frAI1.Label1.Visible := false;
|
||||
frAI1.edtAIP2.Visible := True;
|
||||
frAI1.edtAIP2.Password := True;
|
||||
frAI1.edtAIP3.Visible := false;
|
||||
frAI1.cbOllama.IsChecked := false;
|
||||
frAI1.cbOllama.Visible := false;
|
||||
end;
|
||||
1:
|
||||
begin
|
||||
frAI1.rbDS.IsChecked := True;
|
||||
frAI1.Label45.text := 'API Token';
|
||||
frAI1.Label47.text := '';
|
||||
frAI1.Label1.Visible := false;
|
||||
frAI1.edtAIP2.Visible := false;
|
||||
frAI1.edtAIP2.Password := false;
|
||||
frAI1.edtAIP3.Visible := false;
|
||||
frAI1.cbOllama.IsChecked := false;
|
||||
frAI1.cbOllama.Visible := false;
|
||||
end;
|
||||
2:
|
||||
begin
|
||||
frAI1.rbCG.IsChecked := True;
|
||||
frAI1.Label45.text := 'API Token';
|
||||
frAI1.Label47.text := '';
|
||||
frAI1.Label1.Visible := false;
|
||||
frAI1.edtAIP2.Visible := false;
|
||||
frAI1.edtAIP2.Password := false;
|
||||
frAI1.edtAIP3.Visible := false;
|
||||
frAI1.cbOllama.IsChecked := false;
|
||||
frAI1.cbOllama.Visible := false;
|
||||
end;
|
||||
3:
|
||||
begin
|
||||
frAI1.RBCustom.IsChecked := True;
|
||||
frAI1.Label45.text := 'API Token';
|
||||
frAI1.Label47.text := 'URL';
|
||||
frAI1.Label1.Visible := True;
|
||||
frAI1.edtAIP2.Visible := True;
|
||||
frAI1.edtAIP2.Password := false;
|
||||
frAI1.edtAIP3.Visible := True;
|
||||
frAI1.cbOllama.IsChecked := db.ReadSetting(frAI1.cbOllama.Name) = '1';
|
||||
frAI1.cbOllama.Visible := True;
|
||||
end;
|
||||
end;
|
||||
|
||||
db.LoadGridFromTable('sgTimers', frAutoActions1.sgTimers);
|
||||
db.LoadGridFromTable('sgCounter', frAutoActions1.sgCounter);
|
||||
db.LoadGridFromTable('sgBanWords', frAutoActions1.sgBanWords);
|
||||
|
||||
end;
|
||||
|
||||
end.
|
||||
@@ -0,0 +1,392 @@
|
||||
unit uRecords;
|
||||
|
||||
interface
|
||||
|
||||
|
||||
type
|
||||
TConst = record
|
||||
GeneralPath: string;
|
||||
AppDataPath: string;
|
||||
DBPath: string;
|
||||
fontsPath: string;
|
||||
imgsPath: string;
|
||||
soundsPath: string;
|
||||
stlPath: string;
|
||||
ytSongsPath: string;
|
||||
PublicPlay: string;
|
||||
SilentPlay: string;
|
||||
ytPlay: string;
|
||||
cfg1: string;
|
||||
end;
|
||||
|
||||
type
|
||||
TLogin = record
|
||||
TTV_Token_Bot: string;
|
||||
TTV_Token_Strimer: string;
|
||||
TTV_Name_Bot: string;
|
||||
TTV_Name_Strimer: string;
|
||||
TTV_ClientID: string;
|
||||
|
||||
DA_ClientID: string;
|
||||
DA_Client_Sictert: string;
|
||||
DA_RedirectURL: string;
|
||||
DA_Code: string;
|
||||
|
||||
AI_Gigachat_ClientID: string;
|
||||
AI_Gigachat_AutorizationCode: string;
|
||||
AI_ChatGPT_Token: string;
|
||||
AI_DeepSeek_Token: string;
|
||||
end;
|
||||
|
||||
var
|
||||
RLogin: TLogin;
|
||||
|
||||
type
|
||||
TUser = record
|
||||
id: string;
|
||||
login: string;
|
||||
DisplayName: string;
|
||||
created_at: TDateTime;
|
||||
follow_at: TDateTime;
|
||||
isVip: boolean;
|
||||
isModer: boolean;
|
||||
isO: boolean;
|
||||
isO_today: boolean;
|
||||
end;
|
||||
|
||||
TImage = record
|
||||
Url1x: string;
|
||||
Url2x: string;
|
||||
Url4x: string;
|
||||
end;
|
||||
|
||||
{ TReward = record
|
||||
Id: string;
|
||||
ChannelId: string;
|
||||
Title: string;
|
||||
Prompt: string;
|
||||
Cost: Integer;
|
||||
IsUserInputRequired: Boolean;
|
||||
IsSubOnly: Boolean;
|
||||
Image: TImage;
|
||||
DefaultImage: TImage;
|
||||
BackgroundColor: string;
|
||||
IsEnabled: Boolean;
|
||||
IsPaused: Boolean;
|
||||
IsInStock: Boolean;
|
||||
MaxPerStream: record
|
||||
IsEnabled: Boolean;
|
||||
MaxPerStream: Integer;
|
||||
end;
|
||||
ShouldRedemptionsSkipRequestQueue: Boolean;
|
||||
end; }
|
||||
|
||||
{ TRedemption = record
|
||||
Id: string;
|
||||
User: TUser;
|
||||
ChannelId: string;
|
||||
RedeemedAt: string;
|
||||
Reward: TReward;
|
||||
UserInput: string;
|
||||
Status: string;
|
||||
end; }
|
||||
|
||||
{ TData = record
|
||||
Timestamp: string;
|
||||
Topic: string; // Äîáàâëåíî ïîëå Topic
|
||||
MessageType: string; // Äîáàâëåíî ïîëå MessageType
|
||||
Redemption: TRedemption;
|
||||
end; }
|
||||
|
||||
{ TRewardRedeemed = record
|
||||
&Type: string;
|
||||
Data: TData;
|
||||
end; }
|
||||
|
||||
type
|
||||
TCustomRevards = record
|
||||
id: string;
|
||||
title: string;
|
||||
promt: string;
|
||||
cost: integer;
|
||||
is_user_input_required: boolean;
|
||||
end;
|
||||
|
||||
{ type
|
||||
THistRevards = record
|
||||
revard: TRewardRedeemed;
|
||||
user: user;
|
||||
is_ok: boolean;
|
||||
end; }
|
||||
|
||||
type
|
||||
TTwitchChatMessage = record
|
||||
BadgeInfo: string;
|
||||
Badges: string;
|
||||
ClientNonce: string;
|
||||
Color: string;
|
||||
DisplayName: string;
|
||||
Emotes: string;
|
||||
FirstMsg: integer;
|
||||
Flags: string;
|
||||
id: string;
|
||||
Moder: integer;
|
||||
ReturningChatter: integer;
|
||||
RoomId: string;
|
||||
Subscriber: integer;
|
||||
TmiSentTs: Int64;
|
||||
Turbo: integer;
|
||||
UserId: string;
|
||||
UserType: string;
|
||||
Vip: integer;
|
||||
Username: string;
|
||||
Channel: string;
|
||||
Message: string;
|
||||
end;
|
||||
|
||||
type
|
||||
TBadgeVersion = record
|
||||
id: string;
|
||||
ImageUrl1x: string;
|
||||
ImageUrl2x: string;
|
||||
ImageUrl4x: string;
|
||||
title: string;
|
||||
Description: string;
|
||||
ClickAction: string;
|
||||
ClickUrl: string;
|
||||
end;
|
||||
|
||||
TChatBadge = record
|
||||
SetId: string;
|
||||
Versions: TArray<TBadgeVersion>;
|
||||
end;
|
||||
|
||||
TEmotes = record
|
||||
id: string;
|
||||
name: string;
|
||||
images: TImage;
|
||||
tier: string;
|
||||
emote_type: string;
|
||||
emote_set_id: string;
|
||||
format: TArray<string>;
|
||||
scale: TArray<string>;
|
||||
theme_mode: TArray<string>;
|
||||
end;
|
||||
|
||||
TStyleChat = record
|
||||
Nick: string;
|
||||
Context: string;
|
||||
MaxMsgCount: integer;
|
||||
TimeMsg: integer;
|
||||
FontSize: integer;
|
||||
FontFamily: string;
|
||||
FontColor: string;
|
||||
BorderColor: string;
|
||||
BColor: string;
|
||||
BorderSize: integer;
|
||||
BlockColor: string;
|
||||
BlockPadding: integer;
|
||||
end;
|
||||
|
||||
TFont = record
|
||||
Font: string;
|
||||
Size: integer;
|
||||
Color: string;
|
||||
end;
|
||||
|
||||
TStyleEvent = record
|
||||
title: string;
|
||||
Context: string;
|
||||
Url: string;
|
||||
SoundURL: string;
|
||||
RequireInteraction: boolean;
|
||||
|
||||
Timestamp: TDateTime;
|
||||
TimeMsg: integer;
|
||||
|
||||
FontTitle: TFont;
|
||||
FontContext: TFont;
|
||||
|
||||
BorderColor: string;
|
||||
BorderSize: integer;
|
||||
BlockColor: string;
|
||||
|
||||
end;
|
||||
|
||||
type
|
||||
TBTTVr = record
|
||||
id: string;
|
||||
code: string;
|
||||
end;
|
||||
|
||||
type
|
||||
T7TVr = record
|
||||
id: string;
|
||||
code: string;
|
||||
Url: string;
|
||||
end;
|
||||
|
||||
TCondition = record
|
||||
broadcaster_user_id: string;
|
||||
reward_id: string;
|
||||
end;
|
||||
|
||||
TTransport = record
|
||||
method: string;
|
||||
end;
|
||||
|
||||
TSubscriptionPoints = record
|
||||
id: string;
|
||||
subscription_type: string;
|
||||
// "type" çàðåçåðâèðîâàíî â Delphi, ïîýòîìó èñïîëüçóåì äðóãîå èìÿ
|
||||
version: string;
|
||||
status: string;
|
||||
cost: integer;
|
||||
condition: TCondition;
|
||||
transport: TTransport;
|
||||
created_at: string;
|
||||
end;
|
||||
|
||||
TMaxPerStream = record
|
||||
is_enabled: boolean;
|
||||
value: integer;
|
||||
end;
|
||||
|
||||
TMaxPerUserPerStream = record
|
||||
is_enabled: boolean;
|
||||
value: integer;
|
||||
end;
|
||||
|
||||
TGlobalCooldown = record
|
||||
is_enabled: boolean;
|
||||
seconds: integer;
|
||||
end;
|
||||
|
||||
TReward = record
|
||||
id: string;
|
||||
title: string;
|
||||
cost: integer;
|
||||
prompt: string;
|
||||
end;
|
||||
|
||||
TEventReward = record
|
||||
id: string;
|
||||
broadcaster_user_id: string;
|
||||
broadcaster_user_login: string;
|
||||
broadcaster_user_name: string;
|
||||
user_id: string;
|
||||
user_login: string;
|
||||
user_name: string;
|
||||
user_input: string;
|
||||
revard: TReward;
|
||||
end;
|
||||
|
||||
TCustomRewardEvent = record
|
||||
subscription: TSubscriptionPoints;
|
||||
event: TEventReward;
|
||||
end;
|
||||
|
||||
TMetadata = record
|
||||
message_id: string;
|
||||
message_type: string;
|
||||
message_timestamp: string;
|
||||
subscription_type: string;
|
||||
end;
|
||||
|
||||
TSession = record
|
||||
id: string;
|
||||
status: string;
|
||||
connected_at: string;
|
||||
keepalive_timeout_seconds: integer;
|
||||
reconnect_url: string;
|
||||
end;
|
||||
|
||||
TPayload = record
|
||||
session: TSession;
|
||||
end;
|
||||
|
||||
TWelcomMessage = record
|
||||
payload: TPayload;
|
||||
end;
|
||||
|
||||
TEventFollow = record
|
||||
user_id: string;
|
||||
user_login: string;
|
||||
user_name: string;
|
||||
broadcaster_user_id: string;
|
||||
broadcaster_user_login: string;
|
||||
broadcaster_user_name: string;
|
||||
followed_at: string;
|
||||
end;
|
||||
|
||||
TEventSub = record
|
||||
user_id: string;
|
||||
user_login: string;
|
||||
user_name: string;
|
||||
broadcaster_user_id: string;
|
||||
broadcaster_user_login: string;
|
||||
broadcaster_user_name: string;
|
||||
tier: string;
|
||||
is_gift: boolean;
|
||||
end;
|
||||
|
||||
TEventGift = record
|
||||
user_id: string;
|
||||
user_login: string;
|
||||
user_name: string;
|
||||
broadcaster_user_id: string;
|
||||
broadcaster_user_login: string;
|
||||
broadcaster_user_name: string;
|
||||
total: integer;
|
||||
tier: string;
|
||||
cumulative_total: integer; // null if anonymous or not shared by the user
|
||||
is_anonymous: boolean;
|
||||
end;
|
||||
|
||||
TEventRaid = record
|
||||
from_broadcaster_user_id: string;
|
||||
from_broadcaster_user_login: string;
|
||||
from_broadcaster_user_name: string;
|
||||
to_broadcaster_user_id: string;
|
||||
to_broadcaster_user_login: string;
|
||||
to_broadcaster_user_name: string;
|
||||
viewers: integer;
|
||||
end;
|
||||
|
||||
TFollowEvent = record
|
||||
subscription: TSubscriptionPoints;
|
||||
event: TEventFollow;
|
||||
end;
|
||||
|
||||
TSubEvent = record
|
||||
subscription: TSubscriptionPoints;
|
||||
event: TEventSub;
|
||||
end;
|
||||
|
||||
TGiftEvent = record
|
||||
subscription: TSubscriptionPoints;
|
||||
event: TEventGift;
|
||||
end;
|
||||
|
||||
TRaidEvent = record
|
||||
subscription: TSubscriptionPoints;
|
||||
event: TEventRaid;
|
||||
end;
|
||||
|
||||
TBotAppCfg = record
|
||||
TTV_ClientID: string;
|
||||
AI_GigaChat_AC: string;
|
||||
AI_Gigachat_ClientID: string;
|
||||
AI_ChatGPT_Token: string;
|
||||
AI_DeepSeec_Token: string;
|
||||
DA_ClientID: string;
|
||||
DA_Sicret: string;
|
||||
DA_URL: string;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
|
||||
end.
|
||||