This commit is contained in:
PC1\PTyTb
2025-08-05 20:19:01 +03:00
commit cffb877b39
46 changed files with 27769 additions and 0 deletions
+23
View File
@@ -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.
+1363
View File
File diff suppressed because it is too large Load Diff
+209
View File
@@ -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
+42
View File
@@ -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.
+307
View File
@@ -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
+61
View File
@@ -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.
+393
View File
@@ -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
+67
View File
@@ -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.
+654
View File
@@ -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
+95
View File
@@ -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.
+87
View File
@@ -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
+35
View File
@@ -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.
+260
View File
@@ -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
+50
View File
@@ -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.
+334
View File
@@ -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
+55
View File
@@ -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.
Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

+491
View File
@@ -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.
+22396
View File
File diff suppressed because it is too large Load Diff
+455
View File
@@ -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.
+392
View File
@@ -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.