исправил оповещения, теперь работают четко
This commit is contained in:
@@ -93,7 +93,6 @@ function TTTW_API.createCustomReward(title: string; cost: string;
|
|||||||
var
|
var
|
||||||
RequestData: TStringStream;
|
RequestData: TStringStream;
|
||||||
s, s1, json: string;
|
s, s1, json: string;
|
||||||
i: integer;
|
|
||||||
cr: TCustomRevards;
|
cr: TCustomRevards;
|
||||||
JSONData: TJSONObject;
|
JSONData: TJSONObject;
|
||||||
JSONArray: TJSONArray;
|
JSONArray: TJSONArray;
|
||||||
@@ -1041,9 +1040,9 @@ var
|
|||||||
EmoteObj: TJSONObject;
|
EmoteObj: TJSONObject;
|
||||||
ImagesObj: TJSONObject;
|
ImagesObj: TJSONObject;
|
||||||
Emote: TEmotes;
|
Emote: TEmotes;
|
||||||
I, J: Integer;
|
I: Integer;
|
||||||
chosenFormat, chosenTheme, chosenScale: string;
|
chosenFormat, chosenTheme, chosenScale: string;
|
||||||
foundAnimated, foundNonStatic, foundDark: Boolean;
|
foundAnimated, foundDark: Boolean;
|
||||||
scaleVal, maxScale: Double;
|
scaleVal, maxScale: Double;
|
||||||
s: string;
|
s: string;
|
||||||
begin
|
begin
|
||||||
@@ -1076,7 +1075,6 @@ begin
|
|||||||
|
|
||||||
// Âûáîð ôîðìàòà (format)
|
// Âûáîð ôîðìàòà (format)
|
||||||
foundAnimated := False;
|
foundAnimated := False;
|
||||||
foundNonStatic := False;
|
|
||||||
chosenFormat := 'static'; // çíà÷åíèå ïî óìîë÷àíèþ
|
chosenFormat := 'static'; // çíà÷åíèå ïî óìîë÷àíèþ
|
||||||
|
|
||||||
// Ïðîâåðêà íàëè÷èÿ "animated"
|
// Ïðîâåðêà íàëè÷èÿ "animated"
|
||||||
@@ -1094,7 +1092,6 @@ begin
|
|||||||
if s <> 'static' then
|
if s <> 'static' then
|
||||||
begin
|
begin
|
||||||
chosenFormat := s;
|
chosenFormat := s;
|
||||||
foundNonStatic := True;
|
|
||||||
Break;
|
Break;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -47,7 +47,8 @@ uses
|
|||||||
uWebServerKandinsky in 'utils\uWebServerKandinsky.pas',
|
uWebServerKandinsky in 'utils\uWebServerKandinsky.pas',
|
||||||
uWebServerEvents in 'utils\uWebServerEvents.pas',
|
uWebServerEvents in 'utils\uWebServerEvents.pas',
|
||||||
fEvents in 'frames\fEvents.pas' {frEvents: TFrame},
|
fEvents in 'frames\fEvents.pas' {frEvents: TFrame},
|
||||||
uKeyEvent in 'utils\uKeyEvent.pas';
|
uKeyEvent in 'utils\uKeyEvent.pas',
|
||||||
|
fRevards in 'frames\fRevards.pas' {frRevards: TFrame};
|
||||||
|
|
||||||
{$R *.res}
|
{$R *.res}
|
||||||
|
|
||||||
|
|||||||
+36
-2
@@ -306,9 +306,12 @@
|
|||||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||||
<VerInfo_MajorVer>10</VerInfo_MajorVer>
|
<VerInfo_MajorVer>10</VerInfo_MajorVer>
|
||||||
<VerInfo_MinorVer>1</VerInfo_MinorVer>
|
<VerInfo_MinorVer>1</VerInfo_MinorVer>
|
||||||
<VerInfo_Release>1</VerInfo_Release>
|
<VerInfo_Release>2</VerInfo_Release>
|
||||||
<VerInfo_Locale>1049</VerInfo_Locale>
|
<VerInfo_Locale>1049</VerInfo_Locale>
|
||||||
<VerInfo_Keys>CompanyName=PTyTb;FileDescription=$(MSBuildProjectName);FileVersion=10.1.1.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=ru.ptytb.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
|
<VerInfo_Keys>CompanyName=PTyTb;FileDescription=$(MSBuildProjectName);FileVersion=10.1.2.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=ru.ptytb.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
|
||||||
|
<Icon_MainIcon>TTW_Bot_app_Icon2.ico</Icon_MainIcon>
|
||||||
|
<UWP_DelphiLogo44>..\ttw_fmx_v9\fawico_44_2.png</UWP_DelphiLogo44>
|
||||||
|
<UWP_DelphiLogo150>..\ttw_fmx_v9\fawico_150_2.png</UWP_DelphiLogo150>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Cfg_2_Win64)'!=''">
|
<PropertyGroup Condition="'$(Cfg_2_Win64)'!=''">
|
||||||
<AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode>
|
<AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode>
|
||||||
@@ -438,6 +441,11 @@
|
|||||||
<DesignClass>TFrame</DesignClass>
|
<DesignClass>TFrame</DesignClass>
|
||||||
</DCCReference>
|
</DCCReference>
|
||||||
<DCCReference Include="utils\uKeyEvent.pas"/>
|
<DCCReference Include="utils\uKeyEvent.pas"/>
|
||||||
|
<DCCReference Include="frames\fRevards.pas">
|
||||||
|
<Form>frRevards</Form>
|
||||||
|
<FormType>fmx</FormType>
|
||||||
|
<DesignClass>TFrame</DesignClass>
|
||||||
|
</DCCReference>
|
||||||
<None Include=".gitignore"/>
|
<None Include=".gitignore"/>
|
||||||
<BuildConfiguration Include="Base">
|
<BuildConfiguration Include="Base">
|
||||||
<Key>Base</Key>
|
<Key>Base</Key>
|
||||||
@@ -487,6 +495,13 @@
|
|||||||
<Overwrite>true</Overwrite>
|
<Overwrite>true</Overwrite>
|
||||||
</Platform>
|
</Platform>
|
||||||
</DeployFile>
|
</DeployFile>
|
||||||
|
<DeployFile LocalName="..\ttw_fmx_v9\fawico_150_2.png" Configuration="Release" Class="UWP_DelphiLogo150">
|
||||||
|
<Platform Name="Win32">
|
||||||
|
<RemoteDir>Assets\</RemoteDir>
|
||||||
|
<RemoteName>Logo150x150.png</RemoteName>
|
||||||
|
<Overwrite>true</Overwrite>
|
||||||
|
</Platform>
|
||||||
|
</DeployFile>
|
||||||
<DeployFile LocalName="..\ttw_fmx_v9\fawico_44_2.png" Configuration="Debug" Class="UWP_DelphiLogo44">
|
<DeployFile LocalName="..\ttw_fmx_v9\fawico_44_2.png" Configuration="Debug" Class="UWP_DelphiLogo44">
|
||||||
<Platform Name="Win32">
|
<Platform Name="Win32">
|
||||||
<RemoteDir>Assets\</RemoteDir>
|
<RemoteDir>Assets\</RemoteDir>
|
||||||
@@ -494,18 +509,37 @@
|
|||||||
<Overwrite>true</Overwrite>
|
<Overwrite>true</Overwrite>
|
||||||
</Platform>
|
</Platform>
|
||||||
</DeployFile>
|
</DeployFile>
|
||||||
|
<DeployFile LocalName="..\ttw_fmx_v9\fawico_44_2.png" Configuration="Release" Class="UWP_DelphiLogo44">
|
||||||
|
<Platform Name="Win32">
|
||||||
|
<RemoteDir>Assets\</RemoteDir>
|
||||||
|
<RemoteName>Logo44x44.png</RemoteName>
|
||||||
|
<Overwrite>true</Overwrite>
|
||||||
|
</Platform>
|
||||||
|
</DeployFile>
|
||||||
<DeployFile LocalName=".gitignore" Configuration="Debug" Class="ProjectFile">
|
<DeployFile LocalName=".gitignore" Configuration="Debug" Class="ProjectFile">
|
||||||
<Platform Name="Win32">
|
<Platform Name="Win32">
|
||||||
<RemoteDir>.\</RemoteDir>
|
<RemoteDir>.\</RemoteDir>
|
||||||
<Overwrite>true</Overwrite>
|
<Overwrite>true</Overwrite>
|
||||||
</Platform>
|
</Platform>
|
||||||
</DeployFile>
|
</DeployFile>
|
||||||
|
<DeployFile LocalName=".gitignore" Configuration="Release" Class="ProjectFile">
|
||||||
|
<Platform Name="Win32">
|
||||||
|
<RemoteDir>.\</RemoteDir>
|
||||||
|
<Overwrite>true</Overwrite>
|
||||||
|
</Platform>
|
||||||
|
</DeployFile>
|
||||||
<DeployFile LocalName="Win32\Debug\TTW_Bot_app.exe" Configuration="Debug" Class="ProjectOutput">
|
<DeployFile LocalName="Win32\Debug\TTW_Bot_app.exe" Configuration="Debug" Class="ProjectOutput">
|
||||||
<Platform Name="Win32">
|
<Platform Name="Win32">
|
||||||
<RemoteName>TTW_Bot_app.exe</RemoteName>
|
<RemoteName>TTW_Bot_app.exe</RemoteName>
|
||||||
<Overwrite>true</Overwrite>
|
<Overwrite>true</Overwrite>
|
||||||
</Platform>
|
</Platform>
|
||||||
</DeployFile>
|
</DeployFile>
|
||||||
|
<DeployFile LocalName="Win32\Release\TTW_Bot_app.exe" Configuration="Release" Class="ProjectOutput">
|
||||||
|
<Platform Name="Win32">
|
||||||
|
<RemoteName>TTW_Bot_app.exe</RemoteName>
|
||||||
|
<Overwrite>true</Overwrite>
|
||||||
|
</Platform>
|
||||||
|
</DeployFile>
|
||||||
<DeployClass Name="AdditionalDebugSymbols">
|
<DeployClass Name="AdditionalDebugSymbols">
|
||||||
<Platform Name="iOSSimulator">
|
<Platform Name="iOSSimulator">
|
||||||
<Operation>1</Operation>
|
<Operation>1</Operation>
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 91 KiB |
@@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
QKPG@VrKK3q|#/<6##?2r?3t&)_< +6s
|
||||||
|
q ,*<m.~|0256{|I*55w" KK8WZFD
|
||||||
|
-!2->1-7)WDB2,/7p-t+$kmSN?
|
||||||
|
wt (!8+uv5(
|
||||||
@@ -146,7 +146,7 @@ object fCreateNotify: TfCreateNotify
|
|||||||
Position.X = 8.000000000000000000
|
Position.X = 8.000000000000000000
|
||||||
Position.Y = 135.000000000000000000
|
Position.Y = 135.000000000000000000
|
||||||
Text = #1057#1086#1073#1099#1090#1080#1077
|
Text = #1057#1086#1073#1099#1090#1080#1077
|
||||||
TabOrder = 37
|
TabOrder = 38
|
||||||
end
|
end
|
||||||
object cbEventsType: TComboBox
|
object cbEventsType: TComboBox
|
||||||
Items.Strings = (
|
Items.Strings = (
|
||||||
@@ -154,13 +154,14 @@ object fCreateNotify: TfCreateNotify
|
|||||||
#1055#1086#1076#1087#1080#1089#1082#1072
|
#1055#1086#1076#1087#1080#1089#1082#1072
|
||||||
#1055#1086#1076#1072#1088#1086#1095#1085#1072#1103' '#1087#1086#1076#1087#1080#1089#1082#1072
|
#1055#1086#1076#1072#1088#1086#1095#1085#1072#1103' '#1087#1086#1076#1087#1080#1089#1082#1072
|
||||||
#1056#1077#1081#1076
|
#1056#1077#1081#1076
|
||||||
#1044#1086#1085#1072#1090)
|
#1044#1086#1085#1072#1090
|
||||||
|
#1057#1074#1086#1077)
|
||||||
Position.X = 8.000000000000000000
|
Position.X = 8.000000000000000000
|
||||||
Position.Y = 160.000000000000000000
|
Position.Y = 160.000000000000000000
|
||||||
Size.Width = 192.000000000000000000
|
Size.Width = 192.000000000000000000
|
||||||
Size.Height = 22.000000000000000000
|
Size.Height = 22.000000000000000000
|
||||||
Size.PlatformDefault = False
|
Size.PlatformDefault = False
|
||||||
TabOrder = 38
|
TabOrder = 39
|
||||||
OnChange = cbEventsTypeChange
|
OnChange = cbEventsTypeChange
|
||||||
end
|
end
|
||||||
object Label3: TLabel
|
object Label3: TLabel
|
||||||
@@ -168,11 +169,11 @@ object fCreateNotify: TfCreateNotify
|
|||||||
Position.Y = 190.000000000000000000
|
Position.Y = 190.000000000000000000
|
||||||
Text = #1059#1089#1083#1086#1074#1080#1077' '#1089#1091#1084#1084#1099
|
Text = #1059#1089#1083#1086#1074#1080#1077' '#1089#1091#1084#1084#1099
|
||||||
Visible = False
|
Visible = False
|
||||||
TabOrder = 39
|
TabOrder = 40
|
||||||
end
|
end
|
||||||
object edtIF: TEdit
|
object edtIF: TEdit
|
||||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||||
TabOrder = 40
|
TabOrder = 41
|
||||||
Position.X = 8.000000000000000000
|
Position.X = 8.000000000000000000
|
||||||
Position.Y = 215.000000000000000000
|
Position.Y = 215.000000000000000000
|
||||||
Size.Width = 192.000000000000000000
|
Size.Width = 192.000000000000000000
|
||||||
@@ -215,7 +216,7 @@ object fCreateNotify: TfCreateNotify
|
|||||||
object edtESTitle: TEdit
|
object edtESTitle: TEdit
|
||||||
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||||
Align = Top
|
Align = Top
|
||||||
TabOrder = 37
|
TabOrder = 38
|
||||||
Text = '[NICK] '#1085#1072#1095#1072#1083' '#1086#1090#1089#1083#1077#1078#1080#1074#1072#1090#1100' '#1074#1072#1089
|
Text = '[NICK] '#1085#1072#1095#1072#1083' '#1086#1090#1089#1083#1077#1078#1080#1074#1072#1090#1100' '#1074#1072#1089
|
||||||
Position.X = 10.000000000000000000
|
Position.X = 10.000000000000000000
|
||||||
Position.Y = 20.000000000000000000
|
Position.Y = 20.000000000000000000
|
||||||
|
|||||||
+93
-25
@@ -4,7 +4,7 @@ interface
|
|||||||
|
|
||||||
uses
|
uses
|
||||||
System.SysUtils, System.Types, System.UITypes, System.Classes,
|
System.SysUtils, System.Types, System.UITypes, System.Classes,
|
||||||
System.Variants, fOBS,
|
System.Variants, fOBS, System.RegularExpressions, Math,
|
||||||
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, fFontSettings,
|
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, fFontSettings,
|
||||||
fColorSettings, FMX.StdCtrls, FMX.Edit, FMX.Controls.Presentation,
|
fColorSettings, FMX.StdCtrls, FMX.Edit, FMX.Controls.Presentation,
|
||||||
FMX.ListBox, FMX.EditBox, FMX.SpinBox, FMX.Colors, uRecords;
|
FMX.ListBox, FMX.EditBox, FMX.SpinBox, FMX.Colors, uRecords;
|
||||||
@@ -44,6 +44,9 @@ type
|
|||||||
{ Private declarations }
|
{ Private declarations }
|
||||||
function GetColorFromColorPanel(aColor: TAlphaColor): string;
|
function GetColorFromColorPanel(aColor: TAlphaColor): string;
|
||||||
function GetColorFromCCB(aColor: TAlphaColor): string;
|
function GetColorFromCCB(aColor: TAlphaColor): string;
|
||||||
|
|
||||||
|
function GetColorFromRGBA(const s: string): TAlphaColor;
|
||||||
|
function GetColorFromHex(const s: string): TAlphaColor;
|
||||||
public
|
public
|
||||||
{ Public declarations }
|
{ Public declarations }
|
||||||
isEdit: boolean;
|
isEdit: boolean;
|
||||||
@@ -60,6 +63,33 @@ uses uGeneral;
|
|||||||
|
|
||||||
{$R *.fmx}
|
{$R *.fmx}
|
||||||
|
|
||||||
|
function TfCreateNotify.GetColorFromRGBA(const s: string): TAlphaColor;
|
||||||
|
var
|
||||||
|
Match: TMatch;
|
||||||
|
r, g, b: Integer;
|
||||||
|
a: Double;
|
||||||
|
Rec: TAlphaColorRec;
|
||||||
|
begin
|
||||||
|
Match := TRegEx.Match(s, 'rgba\((\d+),\s*(\d+),\s*(\d+),\s*([\d.]+)\)');
|
||||||
|
if Match.Success then
|
||||||
|
begin
|
||||||
|
r := StrToInt(Match.Groups[1].Value);
|
||||||
|
g := StrToInt(Match.Groups[2].Value);
|
||||||
|
b := StrToInt(Match.Groups[3].Value);
|
||||||
|
a := StrToFloat(Match.Groups[4].Value, TFormatSettings.Invariant);
|
||||||
|
|
||||||
|
// Çàïîëíÿåì ñòðóêòóðó âðó÷íóþ
|
||||||
|
Rec.R := Byte(r);
|
||||||
|
Rec.G := Byte(g);
|
||||||
|
Rec.B := Byte(b);
|
||||||
|
Rec.A := Round(a * 255);
|
||||||
|
|
||||||
|
Result := Rec.Color;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
raise Exception.CreateFmt('Íåâåðíûé ôîðìàò rgba: %s', [s]);
|
||||||
|
end;
|
||||||
|
|
||||||
function TfCreateNotify.GetColorFromColorPanel(aColor: TAlphaColor): string;
|
function TfCreateNotify.GetColorFromColorPanel(aColor: TAlphaColor): string;
|
||||||
var
|
var
|
||||||
Color: TAlphaColor;
|
Color: TAlphaColor;
|
||||||
@@ -80,6 +110,47 @@ begin
|
|||||||
result := Format('rgba(%d, %d, %d, %.2f)', [r, G, B, A], FS);
|
result := Format('rgba(%d, %d, %d, %.2f)', [r, G, B, A], FS);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TfCreateNotify.GetColorFromCCB(aColor: TAlphaColor): string;
|
||||||
|
var
|
||||||
|
Color: TAlphaColor;
|
||||||
|
r, G, B: Byte;
|
||||||
|
begin
|
||||||
|
Color := aColor;
|
||||||
|
r := TAlphaColorRec(Color).r;
|
||||||
|
G := TAlphaColorRec(Color).G;
|
||||||
|
B := TAlphaColorRec(Color).B;
|
||||||
|
result := Format('#%.2X%.2X%.2X', [r, G, B]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TfCreateNotify.GetColorFromHex(const s: string): TAlphaColor;
|
||||||
|
var
|
||||||
|
Hex: string;
|
||||||
|
r, g, b: Integer;
|
||||||
|
Rec: TAlphaColorRec;
|
||||||
|
begin
|
||||||
|
// Óáèðàåì âîçìîæíûé ñèìâîë #
|
||||||
|
Hex := s.Trim;
|
||||||
|
if Hex.StartsWith('#') then
|
||||||
|
Hex := Hex.Substring(1);
|
||||||
|
|
||||||
|
// Îæèäàåì ðîâíî 6 ñèìâîëîâ (RRGGBB)
|
||||||
|
if Length(Hex) <> 6 then
|
||||||
|
raise Exception.CreateFmt('Íåâåðíûé HEX öâåò: %s', [s]);
|
||||||
|
|
||||||
|
// Ïàðñèì êîìïîíåíòû
|
||||||
|
r := StrToInt('$' + Copy(Hex, 1, 2));
|
||||||
|
g := StrToInt('$' + Copy(Hex, 3, 2));
|
||||||
|
b := StrToInt('$' + Copy(Hex, 5, 2));
|
||||||
|
|
||||||
|
// Çàïîëíÿåì ñòðóêòóðó
|
||||||
|
Rec.R := Byte(r);
|
||||||
|
Rec.G := Byte(g);
|
||||||
|
Rec.B := Byte(b);
|
||||||
|
Rec.A := 255; // ïîëíàÿ íåïðîçðà÷íîñòü
|
||||||
|
|
||||||
|
Result := Rec.Color;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TfCreateNotify.setRecord(aRec: TOBSNotify);
|
procedure TfCreateNotify.setRecord(aRec: TOBSNotify);
|
||||||
var
|
var
|
||||||
SavedColor: TAlphaColor;
|
SavedColor: TAlphaColor;
|
||||||
@@ -97,19 +168,21 @@ begin
|
|||||||
|
|
||||||
fCreateNotify.frColorSettings1.sbStyleBlockBorderSize.Value := SolidBorder;
|
fCreateNotify.frColorSettings1.sbStyleBlockBorderSize.Value := SolidBorder;
|
||||||
fCreateNotify.frColorSettings1.sbStyleBlockPadding.Value := Paddings;
|
fCreateNotify.frColorSettings1.sbStyleBlockPadding.Value := Paddings;
|
||||||
fCreateNotify.frColorSettings1.ccbStyleBorderColor.ItemIndex := ColorBorder;
|
fCreateNotify.frColorSettings1.ccbStyleBorderColor.Color := GetColorFromHex(ColorBorder);
|
||||||
fCreateNotify.frColorSettings1.ccbBColor.ItemIndex := ColorBackground;
|
fCreateNotify.frColorSettings1.ccbBColor.Color := GetColorFromHex(ColorBackground);
|
||||||
|
fCreateNotify.frColorSettings1.cpStyleBlockColor.Color:=GetColorFromRGBA(ColorBlock);
|
||||||
|
|
||||||
fCreateNotify.edtESTitle.Text := HeaderText;
|
fCreateNotify.edtESTitle.Text := HeaderText;
|
||||||
fCreateNotify.frFontSettings2.ccbFontColor.ItemIndex := HeaderColorFont;
|
fCreateNotify.frFontSettings2.ccbFontColor.Color := GetColorFromHex(HeaderColorFont);
|
||||||
fCreateNotify.frFontSettings2.sbFontSize.Value := HeaderSizeFont;
|
fCreateNotify.frFontSettings2.sbFontSize.Value := HeaderSizeFont;
|
||||||
fCreateNotify.frFontSettings2.cbFontStyleDefault.ItemIndex :=
|
fCreateNotify.frFontSettings2.cbFontStyleDefault.ItemIndex :=
|
||||||
HeaderStyleFont;
|
fCreateNotify.frFontSettings2.cbFontStyleDefault.Items.IndexOf(HeaderStyleFont);
|
||||||
|
|
||||||
fCreateNotify.edtESMessage.Text := MessText;
|
fCreateNotify.edtESMessage.Text := MessText;
|
||||||
fCreateNotify.frFontSettings3.ccbFontColor.ItemIndex := MessColorFont;
|
fCreateNotify.frFontSettings3.ccbFontColor.Color := GetColorFromHex(MessColorFont);
|
||||||
fCreateNotify.frFontSettings3.sbFontSize.Value := MessSizeFont;
|
fCreateNotify.frFontSettings3.sbFontSize.Value := MessSizeFont;
|
||||||
fCreateNotify.frFontSettings3.cbFontStyleDefault.ItemIndex := MessStyleFont;
|
fCreateNotify.frFontSettings3.cbFontStyleDefault.ItemIndex :=
|
||||||
|
fCreateNotify.frFontSettings3.cbFontStyleDefault.Items.IndexOf(MessStyleFont);
|
||||||
|
|
||||||
fCreateNotify.sbTimeMsg.Value := TimeMess;
|
fCreateNotify.sbTimeMsg.Value := TimeMess;
|
||||||
fCreateNotify.cbEventsType.ItemIndex := TypeEvent;
|
fCreateNotify.cbEventsType.ItemIndex := TypeEvent;
|
||||||
@@ -132,18 +205,18 @@ begin
|
|||||||
(frColorSettings1.cpStyleBlockColor.Color);
|
(frColorSettings1.cpStyleBlockColor.Color);
|
||||||
SolidBorder := round(frColorSettings1.sbStyleBlockBorderSize.Value);
|
SolidBorder := round(frColorSettings1.sbStyleBlockBorderSize.Value);
|
||||||
Paddings := round(frColorSettings1.sbStyleBlockPadding.Value);
|
Paddings := round(frColorSettings1.sbStyleBlockPadding.Value);
|
||||||
ColorBorder := frColorSettings1.ccbStyleBorderColor.ItemIndex;
|
ColorBorder := GetColorFromCCB(frColorSettings1.ccbStyleBorderColor.Color);
|
||||||
ColorBackground := frColorSettings1.ccbBColor.ItemIndex;
|
ColorBackground := GetColorFromCCB(frColorSettings1.ccbBColor.Color);
|
||||||
|
|
||||||
HeaderText := edtESTitle.Text;
|
HeaderText := edtESTitle.Text;
|
||||||
HeaderColorFont := frFontSettings2.ccbFontColor.ItemIndex;
|
HeaderColorFont := GetColorFromCCB(frFontSettings2.ccbFontColor.Color);
|
||||||
HeaderSizeFont := round(frFontSettings2.sbFontSize.Value);
|
HeaderSizeFont := round(frFontSettings2.sbFontSize.Value);
|
||||||
HeaderStyleFont := frFontSettings2.cbFontStyleDefault.ItemIndex;
|
HeaderStyleFont := frFontSettings2.cbFontStyleDefault.Text;
|
||||||
|
|
||||||
MessText := edtESMessage.Text;
|
MessText := edtESMessage.Text;
|
||||||
MessColorFont := frFontSettings3.ccbFontColor.ItemIndex;
|
MessColorFont := GetColorFromCCB(frFontSettings3.ccbFontColor.color);
|
||||||
MessSizeFont := round(frFontSettings3.sbFontSize.Value);
|
MessSizeFont := round(frFontSettings3.sbFontSize.Value);
|
||||||
MessStyleFont := frFontSettings3.cbFontStyleDefault.ItemIndex;
|
MessStyleFont := frFontSettings3.cbFontStyleDefault.Text;
|
||||||
|
|
||||||
TimeMess := round(sbTimeMsg.Value);
|
TimeMess := round(sbTimeMsg.Value);
|
||||||
TypeEvent := cbEventsType.ItemIndex;
|
TypeEvent := cbEventsType.ItemIndex;
|
||||||
@@ -159,22 +232,13 @@ end;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
function TfCreateNotify.GetColorFromCCB(aColor: TAlphaColor): string;
|
|
||||||
var
|
|
||||||
Color: TAlphaColor;
|
|
||||||
r, G, B: Byte;
|
|
||||||
begin
|
|
||||||
Color := aColor;
|
|
||||||
r := TAlphaColorRec(Color).r;
|
|
||||||
G := TAlphaColorRec(Color).G;
|
|
||||||
B := TAlphaColorRec(Color).B;
|
|
||||||
result := Format('#%.2X%.2X%.2X', [r, G, B]);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TfCreateNotify.btnESTestClick(Sender: TObject);
|
procedure TfCreateNotify.btnESTestClick(Sender: TObject);
|
||||||
var
|
var
|
||||||
se: TStyleEvent;
|
se: TStyleEvent;
|
||||||
i: Integer;
|
i: Integer;
|
||||||
|
ws:TEventWebServers;
|
||||||
begin
|
begin
|
||||||
|
|
||||||
se.Title := edtESTitle.Text;
|
se.Title := edtESTitle.Text;
|
||||||
@@ -195,8 +259,12 @@ begin
|
|||||||
se.RequireInteraction := True;
|
se.RequireInteraction := True;
|
||||||
for i := 0 to TTW_Bot.frOBS1.EventWebServers.Count - 1 do
|
for i := 0 to TTW_Bot.frOBS1.EventWebServers.Count - 1 do
|
||||||
begin
|
begin
|
||||||
TTW_Bot.frOBS1.EventWebServers[i].WebServerChat.AddMessage(se);
|
if TTW_Bot.frOBS1.EventWebServers[i].port = oldPort then
|
||||||
|
ws:=TTW_Bot.frOBS1.EventWebServers[i];
|
||||||
|
|
||||||
|
|
||||||
end;
|
end;
|
||||||
|
ws.WebServerChat.addMessage(se);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfCreateNotify.cbEventsTypeChange(Sender: TObject);
|
procedure TfCreateNotify.cbEventsTypeChange(Sender: TObject);
|
||||||
|
|||||||
+101
-45
@@ -3,7 +3,7 @@ object TTW_Bot: TTTW_Bot
|
|||||||
Top = 0
|
Top = 0
|
||||||
Caption = 'TTW_Bot'
|
Caption = 'TTW_Bot'
|
||||||
ClientHeight = 886
|
ClientHeight = 886
|
||||||
ClientWidth = 970
|
ClientWidth = 1003
|
||||||
Position = Designed
|
Position = Designed
|
||||||
FormFactor.Width = 320
|
FormFactor.Width = 320
|
||||||
FormFactor.Height = 480
|
FormFactor.Height = 480
|
||||||
@@ -15,30 +15,30 @@ object TTW_Bot: TTTW_Bot
|
|||||||
object V: TTabControl
|
object V: TTabControl
|
||||||
Align = Client
|
Align = Client
|
||||||
Images = ImageList1
|
Images = ImageList1
|
||||||
Size.Width = 970.000000000000000000
|
Size.Width = 1003.000000000000000000
|
||||||
Size.Height = 744.000000000000000000
|
Size.Height = 744.000000000000000000
|
||||||
Size.PlatformDefault = False
|
Size.PlatformDefault = False
|
||||||
TabIndex = 5
|
TabIndex = 3
|
||||||
TabOrder = 0
|
TabOrder = 0
|
||||||
TabPosition = PlatformDefault
|
TabPosition = PlatformDefault
|
||||||
Sizes = (
|
Sizes = (
|
||||||
970s
|
1003s
|
||||||
718s
|
718s
|
||||||
970s
|
1003s
|
||||||
718s
|
718s
|
||||||
970s
|
1003s
|
||||||
718s
|
718s
|
||||||
970s
|
1003s
|
||||||
718s
|
718s
|
||||||
970s
|
1003s
|
||||||
718s
|
718s
|
||||||
970s
|
1003s
|
||||||
718s
|
718s
|
||||||
970s
|
1003s
|
||||||
718s
|
718s
|
||||||
970s
|
1003s
|
||||||
718s
|
718s
|
||||||
970s
|
1003s
|
||||||
718s)
|
718s)
|
||||||
object TabItem1: TTabItem
|
object TabItem1: TTabItem
|
||||||
CustomIcon = <
|
CustomIcon = <
|
||||||
@@ -57,7 +57,7 @@ object TTW_Bot: TTTW_Bot
|
|||||||
ExplicitSize.cy = 26.000000000000000000
|
ExplicitSize.cy = 26.000000000000000000
|
||||||
inline frSettings1: TfrSettings
|
inline frSettings1: TfrSettings
|
||||||
Align = Client
|
Align = Client
|
||||||
Size.Width = 970.000000000000000000
|
Size.Width = 1003.000000000000000000
|
||||||
Size.Height = 718.000000000000000000
|
Size.Height = 718.000000000000000000
|
||||||
Size.PlatformDefault = False
|
Size.PlatformDefault = False
|
||||||
inherited GroupBox3: TGroupBox
|
inherited GroupBox3: TGroupBox
|
||||||
@@ -92,35 +92,35 @@ object TTW_Bot: TTTW_Bot
|
|||||||
TabOrder = 34
|
TabOrder = 34
|
||||||
end
|
end
|
||||||
inherited Label63: TLabel
|
inherited Label63: TLabel
|
||||||
TabOrder = 30
|
TabOrder = 29
|
||||||
end
|
end
|
||||||
inherited edtDAClientID: TEdit
|
inherited edtDAClientID: TEdit
|
||||||
TabOrder = 32
|
|
||||||
end
|
|
||||||
inherited Label64: TLabel
|
|
||||||
TabOrder = 31
|
TabOrder = 31
|
||||||
end
|
end
|
||||||
inherited edtDAClientSecret: TEdit
|
inherited Label64: TLabel
|
||||||
TabOrder = 33
|
TabOrder = 30
|
||||||
|
end
|
||||||
|
inherited Label65: TLabel
|
||||||
|
TabOrder = 32
|
||||||
end
|
end
|
||||||
inherited edtDARedirectURL: TEdit
|
inherited edtDARedirectURL: TEdit
|
||||||
TabOrder = 40
|
TabOrder = 37
|
||||||
end
|
end
|
||||||
inherited edtDACode: TEdit
|
inherited edtDACode: TEdit
|
||||||
TabOrder = 36
|
TabOrder = 35
|
||||||
end
|
end
|
||||||
inherited Label66: TLabel
|
inherited Label66: TLabel
|
||||||
TabOrder = 37
|
TabOrder = 36
|
||||||
end
|
end
|
||||||
inherited btnDAStart: TButton
|
inherited btnDAStart: TButton
|
||||||
Images = ImageList1
|
Images = ImageList1
|
||||||
ImageIndex = 18
|
ImageIndex = 18
|
||||||
TabOrder = 39
|
TabOrder = 38
|
||||||
OnClick = frSettings1btnDAStartClick
|
OnClick = frSettings1btnDAStartClick
|
||||||
end
|
end
|
||||||
inherited btnGetDADef: TButton
|
inherited btnGetDADef: TButton
|
||||||
Images = ImageList1
|
Images = ImageList1
|
||||||
TabOrder = 43
|
TabOrder = 40
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
inherited btnOpenRomaning: TButton
|
inherited btnOpenRomaning: TButton
|
||||||
@@ -168,7 +168,7 @@ object TTW_Bot: TTTW_Bot
|
|||||||
ExplicitSize.cy = 26.000000000000000000
|
ExplicitSize.cy = 26.000000000000000000
|
||||||
inline frAI1: TfrAI
|
inline frAI1: TfrAI
|
||||||
Align = Client
|
Align = Client
|
||||||
Size.Width = 970.000000000000000000
|
Size.Width = 1003.000000000000000000
|
||||||
Size.Height = 718.000000000000000000
|
Size.Height = 718.000000000000000000
|
||||||
Size.PlatformDefault = False
|
Size.PlatformDefault = False
|
||||||
inherited btnGetAIDef: TButton
|
inherited btnGetAIDef: TButton
|
||||||
@@ -201,7 +201,7 @@ object TTW_Bot: TTTW_Bot
|
|||||||
ExplicitSize.cy = 26.000000000000000000
|
ExplicitSize.cy = 26.000000000000000000
|
||||||
inline frCommands1: TfrCommands
|
inline frCommands1: TfrCommands
|
||||||
Align = Client
|
Align = Client
|
||||||
Size.Width = 970.000000000000000000
|
Size.Width = 1003.000000000000000000
|
||||||
Size.Height = 718.000000000000000000
|
Size.Height = 718.000000000000000000
|
||||||
Size.PlatformDefault = False
|
Size.PlatformDefault = False
|
||||||
inherited sgCommands: TStringGrid
|
inherited sgCommands: TStringGrid
|
||||||
@@ -269,6 +269,15 @@ object TTW_Bot: TTTW_Bot
|
|||||||
Images = ImageList1
|
Images = ImageList1
|
||||||
ImageIndex = 12
|
ImageIndex = 12
|
||||||
end
|
end
|
||||||
|
object cbHelloTTS: TCheckBox
|
||||||
|
Position.X = 240.000000000000000000
|
||||||
|
Position.Y = 35.000000000000000000
|
||||||
|
Size.Width = 152.000000000000000000
|
||||||
|
Size.Height = 19.000000000000000000
|
||||||
|
Size.PlatformDefault = False
|
||||||
|
TabOrder = 48
|
||||||
|
Text = #1055#1088#1080#1074#1077#1090#1089#1090#1074#1086#1074#1072#1090#1100' '#1085#1086#1074#1099#1093
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
inherited GroupBox9: TGroupBox
|
inherited GroupBox9: TGroupBox
|
||||||
@@ -423,7 +432,7 @@ object TTW_Bot: TTTW_Bot
|
|||||||
item
|
item
|
||||||
end>
|
end>
|
||||||
TextSettings.Trimming = None
|
TextSettings.Trimming = None
|
||||||
IsSelected = False
|
IsSelected = True
|
||||||
ImageIndex = 20
|
ImageIndex = 20
|
||||||
Size.Width = 79.000000000000000000
|
Size.Width = 79.000000000000000000
|
||||||
Size.Height = 26.000000000000000000
|
Size.Height = 26.000000000000000000
|
||||||
@@ -466,7 +475,8 @@ object TTW_Bot: TTTW_Bot
|
|||||||
Padding.Top = 20.000000000000000000
|
Padding.Top = 20.000000000000000000
|
||||||
Padding.Right = 10.000000000000000000
|
Padding.Right = 10.000000000000000000
|
||||||
Padding.Bottom = 10.000000000000000000
|
Padding.Bottom = 10.000000000000000000
|
||||||
Position.Y = 249.000000000000000000
|
Position.X = 1.000000000000000000
|
||||||
|
Position.Y = 342.000000000000000000
|
||||||
Size.Width = 841.000000000000000000
|
Size.Width = 841.000000000000000000
|
||||||
Size.Height = 368.000000000000000000
|
Size.Height = 368.000000000000000000
|
||||||
Size.PlatformDefault = False
|
Size.PlatformDefault = False
|
||||||
@@ -509,6 +519,52 @@ object TTW_Bot: TTTW_Bot
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
object GroupBox3: TGroupBox
|
||||||
|
Padding.Left = 10.000000000000000000
|
||||||
|
Padding.Top = 20.000000000000000000
|
||||||
|
Padding.Right = 10.000000000000000000
|
||||||
|
Padding.Bottom = 10.000000000000000000
|
||||||
|
Position.X = 337.000000000000000000
|
||||||
|
Position.Y = 8.000000000000000000
|
||||||
|
Size.Width = 625.000000000000000000
|
||||||
|
Size.Height = 326.000000000000000000
|
||||||
|
Size.PlatformDefault = False
|
||||||
|
Text = #1053#1072#1075#1088#1072#1076#1099
|
||||||
|
TabOrder = 2
|
||||||
|
inline frRevards1: TfrRevards
|
||||||
|
Align = Client
|
||||||
|
Size.Width = 605.000000000000000000
|
||||||
|
Size.Height = 296.000000000000000000
|
||||||
|
Size.PlatformDefault = False
|
||||||
|
inherited StringGrid1: TStringGrid
|
||||||
|
Size.Width = 605.000000000000000000
|
||||||
|
Size.Height = 153.000000000000000000
|
||||||
|
Viewport.Width = 605.000000000000000000
|
||||||
|
Viewport.Height = 153.000000000000000000
|
||||||
|
inherited StringColumn1: TStringColumn
|
||||||
|
Size.Width = 241.000000000000000000
|
||||||
|
end
|
||||||
|
inherited StringColumn2: TStringColumn
|
||||||
|
Size.Width = 140.000000000000000000
|
||||||
|
end
|
||||||
|
end
|
||||||
|
inherited Label34: TLabel
|
||||||
|
TabOrder = 2
|
||||||
|
end
|
||||||
|
inherited nbCustomRevardCost: TNumberBox
|
||||||
|
TabOrder = 5
|
||||||
|
end
|
||||||
|
inherited Label35: TLabel
|
||||||
|
TabOrder = 3
|
||||||
|
end
|
||||||
|
inherited Label2: TLabel
|
||||||
|
TabOrder = 9
|
||||||
|
end
|
||||||
|
inherited btnDelCustomRewards: TButton
|
||||||
|
TabOrder = 16
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
object TabItem4: TTabItem
|
object TabItem4: TTabItem
|
||||||
CustomIcon = <
|
CustomIcon = <
|
||||||
@@ -527,13 +583,13 @@ object TTW_Bot: TTTW_Bot
|
|||||||
ExplicitSize.cy = 26.000000000000000000
|
ExplicitSize.cy = 26.000000000000000000
|
||||||
inline frOBS1: TfrOBS
|
inline frOBS1: TfrOBS
|
||||||
Align = Top
|
Align = Top
|
||||||
Size.Width = 970.000000000000000000
|
Size.Width = 1003.000000000000000000
|
||||||
Size.Height = 345.000000000000000000
|
Size.Height = 345.000000000000000000
|
||||||
Size.PlatformDefault = False
|
Size.PlatformDefault = False
|
||||||
inherited sgWebChats: TStringGrid
|
inherited sgWebChats: TStringGrid
|
||||||
Size.Width = 970.000000000000000000
|
Size.Width = 1003.000000000000000000
|
||||||
Size.Height = 282.000000000000000000
|
Size.Height = 282.000000000000000000
|
||||||
Viewport.Width = 970.000000000000000000
|
Viewport.Width = 1003.000000000000000000
|
||||||
Viewport.Height = 282.000000000000000000
|
Viewport.Height = 282.000000000000000000
|
||||||
inherited StringColumn2: TStringColumn
|
inherited StringColumn2: TStringColumn
|
||||||
Size.Width = 200.000000000000000000
|
Size.Width = 200.000000000000000000
|
||||||
@@ -550,7 +606,7 @@ object TTW_Bot: TTTW_Bot
|
|||||||
Anchors = [akTop, akRight]
|
Anchors = [akTop, akRight]
|
||||||
Images = ImageList1
|
Images = ImageList1
|
||||||
ImageIndex = 4
|
ImageIndex = 4
|
||||||
Position.X = 882.000000000000000000
|
Position.X = 915.000000000000000000
|
||||||
TabOrder = 3
|
TabOrder = 3
|
||||||
OnClick = frOBS1btnDeleteeChatClick
|
OnClick = frOBS1btnDeleteeChatClick
|
||||||
end
|
end
|
||||||
@@ -566,7 +622,7 @@ object TTW_Bot: TTTW_Bot
|
|||||||
Images = ImageList1
|
Images = ImageList1
|
||||||
ImageIndex = 5
|
ImageIndex = 5
|
||||||
Position.X = 264.000000000000000000
|
Position.X = 264.000000000000000000
|
||||||
TabOrder = 8
|
TabOrder = 11
|
||||||
end
|
end
|
||||||
object btnCreateChat: TButton
|
object btnCreateChat: TButton
|
||||||
Images = ImageList1
|
Images = ImageList1
|
||||||
@@ -603,7 +659,7 @@ object TTW_Bot: TTTW_Bot
|
|||||||
item
|
item
|
||||||
end>
|
end>
|
||||||
TextSettings.Trimming = None
|
TextSettings.Trimming = None
|
||||||
IsSelected = True
|
IsSelected = False
|
||||||
ImageIndex = 24
|
ImageIndex = 24
|
||||||
Size.Width = 110.000000000000000000
|
Size.Width = 110.000000000000000000
|
||||||
Size.Height = 26.000000000000000000
|
Size.Height = 26.000000000000000000
|
||||||
@@ -615,7 +671,7 @@ object TTW_Bot: TTTW_Bot
|
|||||||
ExplicitSize.cy = 26.000000000000000000
|
ExplicitSize.cy = 26.000000000000000000
|
||||||
inline frNotify1: TfrNotify
|
inline frNotify1: TfrNotify
|
||||||
Align = Client
|
Align = Client
|
||||||
Size.Width = 970.000000000000000000
|
Size.Width = 1003.000000000000000000
|
||||||
Size.Height = 718.000000000000000000
|
Size.Height = 718.000000000000000000
|
||||||
Size.PlatformDefault = False
|
Size.PlatformDefault = False
|
||||||
inherited btnNotifyOpen: TButton
|
inherited btnNotifyOpen: TButton
|
||||||
@@ -697,7 +753,7 @@ object TTW_Bot: TTTW_Bot
|
|||||||
ExplicitSize.cy = 26.000000000000000000
|
ExplicitSize.cy = 26.000000000000000000
|
||||||
inline frAutoActions1: TfrAutoActions
|
inline frAutoActions1: TfrAutoActions
|
||||||
Align = Client
|
Align = Client
|
||||||
Size.Width = 970.000000000000000000
|
Size.Width = 1003.000000000000000000
|
||||||
Size.Height = 718.000000000000000000
|
Size.Height = 718.000000000000000000
|
||||||
Size.PlatformDefault = False
|
Size.PlatformDefault = False
|
||||||
inherited GroupBox20: TGroupBox
|
inherited GroupBox20: TGroupBox
|
||||||
@@ -850,20 +906,20 @@ object TTW_Bot: TTTW_Bot
|
|||||||
ExplicitSize.cy = 26.000000000000000000
|
ExplicitSize.cy = 26.000000000000000000
|
||||||
inline frLog1: TfrLog
|
inline frLog1: TfrLog
|
||||||
Align = Client
|
Align = Client
|
||||||
Size.Width = 970.000000000000000000
|
Size.Width = 1003.000000000000000000
|
||||||
Size.Height = 718.000000000000000000
|
Size.Height = 718.000000000000000000
|
||||||
Size.PlatformDefault = False
|
Size.PlatformDefault = False
|
||||||
inherited Panel1: TPanel
|
inherited Panel1: TPanel
|
||||||
Size.Width = 970.000000000000000000
|
Size.Width = 1003.000000000000000000
|
||||||
inherited btnClear: TButton
|
inherited btnClear: TButton
|
||||||
Images = ImageList1
|
Images = ImageList1
|
||||||
ImageIndex = 4
|
ImageIndex = 4
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
inherited sgLog: TStringGrid
|
inherited sgLog: TStringGrid
|
||||||
Size.Width = 970.000000000000000000
|
Size.Width = 1003.000000000000000000
|
||||||
Size.Height = 685.000000000000000000
|
Size.Height = 685.000000000000000000
|
||||||
Viewport.Width = 970.000000000000000000
|
Viewport.Width = 1003.000000000000000000
|
||||||
Viewport.Height = 685.000000000000000000
|
Viewport.Height = 685.000000000000000000
|
||||||
inherited StringColumn2: TStringColumn
|
inherited StringColumn2: TStringColumn
|
||||||
Size.Width = 170.000000000000000000
|
Size.Width = 170.000000000000000000
|
||||||
@@ -881,7 +937,7 @@ object TTW_Bot: TTTW_Bot
|
|||||||
object Panel1: TPanel
|
object Panel1: TPanel
|
||||||
Align = Bottom
|
Align = Bottom
|
||||||
Position.Y = 744.000000000000000000
|
Position.Y = 744.000000000000000000
|
||||||
Size.Width = 970.000000000000000000
|
Size.Width = 1003.000000000000000000
|
||||||
Size.Height = 142.000000000000000000
|
Size.Height = 142.000000000000000000
|
||||||
Size.PlatformDefault = False
|
Size.PlatformDefault = False
|
||||||
TabOrder = 10
|
TabOrder = 10
|
||||||
@@ -1004,7 +1060,7 @@ object TTW_Bot: TTTW_Bot
|
|||||||
end
|
end
|
||||||
object Label1: TLabel
|
object Label1: TLabel
|
||||||
Anchors = [akTop, akRight]
|
Anchors = [akTop, akRight]
|
||||||
Position.X = 821.000000000000000000
|
Position.X = 854.000000000000000000
|
||||||
Position.Y = 8.000000000000000000
|
Position.Y = 8.000000000000000000
|
||||||
Text = #1054#1090#1076#1077#1083#1100#1085#1086#1077' '#1089#1087#1072#1089#1080#1073#1086':'
|
Text = #1054#1090#1076#1077#1083#1100#1085#1086#1077' '#1089#1087#1072#1089#1080#1073#1086':'
|
||||||
TabOrder = 12
|
TabOrder = 12
|
||||||
@@ -1041,7 +1097,7 @@ object TTW_Bot: TTTW_Bot
|
|||||||
Anchors = [akTop, akRight]
|
Anchors = [akTop, akRight]
|
||||||
Images = ImageList1
|
Images = ImageList1
|
||||||
ImageIndex = 11
|
ImageIndex = 11
|
||||||
Position.X = 821.000000000000000000
|
Position.X = 854.000000000000000000
|
||||||
Position.Y = 33.000000000000000000
|
Position.Y = 33.000000000000000000
|
||||||
Size.Width = 141.000000000000000000
|
Size.Width = 141.000000000000000000
|
||||||
Size.Height = 22.000000000000000000
|
Size.Height = 22.000000000000000000
|
||||||
@@ -1054,7 +1110,7 @@ object TTW_Bot: TTTW_Bot
|
|||||||
Anchors = [akTop, akRight]
|
Anchors = [akTop, akRight]
|
||||||
Images = ImageList1
|
Images = ImageList1
|
||||||
ImageIndex = 11
|
ImageIndex = 11
|
||||||
Position.X = 821.000000000000000000
|
Position.X = 854.000000000000000000
|
||||||
Position.Y = 63.000000000000000000
|
Position.Y = 63.000000000000000000
|
||||||
Size.Width = 141.000000000000000000
|
Size.Width = 141.000000000000000000
|
||||||
Size.Height = 22.000000000000000000
|
Size.Height = 22.000000000000000000
|
||||||
@@ -1067,7 +1123,7 @@ object TTW_Bot: TTTW_Bot
|
|||||||
Anchors = [akTop, akRight]
|
Anchors = [akTop, akRight]
|
||||||
Images = ImageList1
|
Images = ImageList1
|
||||||
ImageIndex = 11
|
ImageIndex = 11
|
||||||
Position.X = 821.000000000000000000
|
Position.X = 854.000000000000000000
|
||||||
Position.Y = 93.000000000000000000
|
Position.Y = 93.000000000000000000
|
||||||
Size.Width = 141.000000000000000000
|
Size.Width = 141.000000000000000000
|
||||||
Size.Height = 22.000000000000000000
|
Size.Height = 22.000000000000000000
|
||||||
|
|||||||
+65
-41
@@ -1,15 +1,15 @@
|
|||||||
{
|
{
|
||||||
получение доната
|
получение доната
|
||||||
procedure TfrSettings.HandleWSDonate(aNick, aMessage, aSum: string);
|
procedure TfrSettings.HandleWSDonate(aNick, aMessage, aSum: string);
|
||||||
|
|
||||||
получение сообщения
|
получение сообщения
|
||||||
procedure TTTW_Bot.ttwIRCOnMessageRecord(aRecord: TTwitchChatMessage);
|
procedure TTTW_Bot.ttwIRCOnMessageRecord(aRecord: TTwitchChatMessage);
|
||||||
|
|
||||||
получение событий
|
получение событий
|
||||||
ttw_ES.OnFollow := frOBS1.toEventWebServer;
|
ttw_ES.OnFollow := frOBS1.toEventWebServer;
|
||||||
ttw_ES.OnSub := frOBS1.toEventWebServer;
|
ttw_ES.OnSub := frOBS1.toEventWebServer;
|
||||||
ttw_ES.OnGift := frOBS1.toEventWebServer;
|
ttw_ES.OnGift := frOBS1.toEventWebServer;
|
||||||
ttw_ES.OnRaid := frOBS1.toEventWebServer;
|
ttw_ES.OnRaid := frOBS1.toEventWebServer;
|
||||||
}
|
}
|
||||||
|
|
||||||
unit uGeneral;
|
unit uGeneral;
|
||||||
@@ -26,7 +26,8 @@ uses
|
|||||||
System.Generics.Collections, utts, uGigaChat, uChatAPI, uMyTimer, uRecords,
|
System.Generics.Collections, utts, uGigaChat, uChatAPI, uMyTimer, uRecords,
|
||||||
System.IOUtils, fCommands, uDataBase, FMX.Edit, FMX.Colors, FMX.SpinBox,
|
System.IOUtils, fCommands, uDataBase, FMX.Edit, FMX.Colors, FMX.SpinBox,
|
||||||
windows, System.Skia, FMX.Skia, uCreateChat, uCreateNotify, fOBS, fTTS,
|
windows, System.Skia, FMX.Skia, uCreateChat, uCreateNotify, fOBS, fTTS,
|
||||||
fPlayerWeb, uWebServerKandinsky, FMX.Memo.Types, FMX.ScrollBox, FMX.Memo;
|
fPlayerWeb, uWebServerKandinsky, FMX.Memo.Types, FMX.ScrollBox, FMX.Memo,
|
||||||
|
fRevards;
|
||||||
|
|
||||||
type
|
type
|
||||||
TTTW_Bot = class(TForm)
|
TTTW_Bot = class(TForm)
|
||||||
@@ -73,6 +74,9 @@ type
|
|||||||
frPlayerWeb1: TfrPlayerWeb;
|
frPlayerWeb1: TfrPlayerWeb;
|
||||||
frEvents1: TfrEvents;
|
frEvents1: TfrEvents;
|
||||||
GroupBox2: TGroupBox;
|
GroupBox2: TGroupBox;
|
||||||
|
cbHelloTTS: TCheckBox;
|
||||||
|
GroupBox3: TGroupBox;
|
||||||
|
frRevards1: TfrRevards;
|
||||||
procedure cbThemeChange(Sender: TObject);
|
procedure cbThemeChange(Sender: TObject);
|
||||||
procedure FormCreate(Sender: TObject);
|
procedure FormCreate(Sender: TObject);
|
||||||
procedure SpeedButton1Click(Sender: TObject);
|
procedure SpeedButton1Click(Sender: TObject);
|
||||||
@@ -117,6 +121,7 @@ type
|
|||||||
procedure ESError(aMsg: string);
|
procedure ESError(aMsg: string);
|
||||||
procedure ESStatus(Sender: TObject; const ConnectionEvent: String;
|
procedure ESStatus(Sender: TObject; const ConnectionEvent: String;
|
||||||
StatusCode: Integer; const Description: String);
|
StatusCode: Integer; const Description: String);
|
||||||
|
procedure ESOnSubOk(s: string);
|
||||||
public
|
public
|
||||||
{ Public declarations }
|
{ Public declarations }
|
||||||
procedure toLog(aModule, aMethod, aMessage: string; aCode: Integer);
|
procedure toLog(aModule, aMethod, aMessage: string; aCode: Integer);
|
||||||
@@ -134,7 +139,7 @@ var
|
|||||||
ttw_API: TTTW_API;
|
ttw_API: TTTW_API;
|
||||||
userlist: TList<TUser>;
|
userlist: TList<TUser>;
|
||||||
Kandinsky: TKandinsky_Web;
|
Kandinsky: TKandinsky_Web;
|
||||||
kePoints:TKE;
|
kePoints: TKE;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
@@ -217,7 +222,7 @@ begin
|
|||||||
on E: Exception do
|
on E: Exception do
|
||||||
begin
|
begin
|
||||||
toLog('uGeneral', 'ConnectProcedure.ttw_API.Init', E.Message, 2);
|
toLog('uGeneral', 'ConnectProcedure.ttw_API.Init', E.Message, 2);
|
||||||
raise;
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@@ -226,7 +231,14 @@ begin
|
|||||||
rid := ttw_API.getRoomAndBot;
|
rid := ttw_API.getRoomAndBot;
|
||||||
if rid = '' then
|
if rid = '' then
|
||||||
raise Exception.Create('Не удалось получить Room ID');
|
raise Exception.Create('Не удалось получить Room ID');
|
||||||
|
try
|
||||||
|
frRevards1.LoadCustomRevards;
|
||||||
|
except
|
||||||
|
on E: Exception do
|
||||||
|
begin
|
||||||
|
toLog('uGeneral', 'ConnectProcedure.LoadCustomRevards', E.Message, 2);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
// Загрузка эмодзи и бейджей
|
// Загрузка эмодзи и бейджей
|
||||||
try
|
try
|
||||||
frOBS1.ChatBadges.Clear;
|
frOBS1.ChatBadges.Clear;
|
||||||
@@ -246,7 +258,7 @@ begin
|
|||||||
on E: Exception do
|
on E: Exception do
|
||||||
begin
|
begin
|
||||||
toLog('uGeneral', 'ConnectProcedure.Emotes', E.Message, 2);
|
toLog('uGeneral', 'ConnectProcedure.Emotes', E.Message, 2);
|
||||||
raise;
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@@ -265,7 +277,7 @@ begin
|
|||||||
ttw_ES.OnGetCustomReward := frEvents1.ESOnGetCustomReward;
|
ttw_ES.OnGetCustomReward := frEvents1.ESOnGetCustomReward;
|
||||||
ttw_ES.OnStatus := ESStatus;
|
ttw_ES.OnStatus := ESStatus;
|
||||||
// ttw_ES.OnRAW := fRewards.ESOnRAW;
|
// ttw_ES.OnRAW := fRewards.ESOnRAW;
|
||||||
// ttw_ES.OnSubOk := fRewards.ESOnSubOk;
|
ttw_ES.OnSubOk := ESOnSubOk;
|
||||||
ttw_ES.OnFollow := frOBS1.toEventWebServer;
|
ttw_ES.OnFollow := frOBS1.toEventWebServer;
|
||||||
ttw_ES.OnSub := frOBS1.toEventWebServer;
|
ttw_ES.OnSub := frOBS1.toEventWebServer;
|
||||||
ttw_ES.OnGift := frOBS1.toEventWebServer;
|
ttw_ES.OnGift := frOBS1.toEventWebServer;
|
||||||
@@ -276,7 +288,7 @@ begin
|
|||||||
on E: Exception do
|
on E: Exception do
|
||||||
begin
|
begin
|
||||||
toLog('uGeneral', 'ConnectProcedure.ttw_ES', E.Message, 2);
|
toLog('uGeneral', 'ConnectProcedure.ttw_ES', E.Message, 2);
|
||||||
raise;
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@@ -290,8 +302,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTTW_Bot.DisconnectProcedure;
|
procedure TTTW_Bot.DisconnectProcedure;
|
||||||
var
|
|
||||||
I: Integer;
|
|
||||||
begin
|
begin
|
||||||
try
|
try
|
||||||
toLog('DisconnectProcedure', 'Start', 'Начало процедуры отключения', 3);
|
toLog('DisconnectProcedure', 'Start', 'Начало процедуры отключения', 3);
|
||||||
@@ -340,6 +351,11 @@ begin
|
|||||||
toLog('uGeneral', 'ESError', aMsg, 2);
|
toLog('uGeneral', 'ESError', aMsg, 2);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TTTW_Bot.ESOnSubOk(s: string);
|
||||||
|
begin
|
||||||
|
toLog('uGeneral', 'ESOnSubOk', s, 0);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TTTW_Bot.ESStatus(Sender: TObject; const ConnectionEvent: String;
|
procedure TTTW_Bot.ESStatus(Sender: TObject; const ConnectionEvent: String;
|
||||||
StatusCode: Integer; const Description: String);
|
StatusCode: Integer; const Description: String);
|
||||||
begin
|
begin
|
||||||
@@ -373,9 +389,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTTW_Bot.btnConnectingClick(Sender: TObject);
|
procedure TTTW_Bot.btnConnectingClick(Sender: TObject);
|
||||||
var
|
|
||||||
rid, tb, ts: string;
|
|
||||||
I: Integer;
|
|
||||||
begin
|
begin
|
||||||
if not ValidateInput then
|
if not ValidateInput then
|
||||||
exit;
|
exit;
|
||||||
@@ -489,17 +503,6 @@ begin
|
|||||||
|
|
||||||
ttw_API := TTTW_API.Create(Self);
|
ttw_API := TTTW_API.Create(Self);
|
||||||
|
|
||||||
if (frAI1.edtKandiKey.text <> '') and (frAI1.edtKandiSecret.text <> '') then
|
|
||||||
begin
|
|
||||||
try
|
|
||||||
Kandinsky := TKandinsky_Web.Create(frAI1.edtKandiKey.text,
|
|
||||||
frAI1.edtKandiSecret.text);
|
|
||||||
Kandinsky.ActiveServer(true);
|
|
||||||
toLog('uAI', 'FormCreate', 'Kandinsky Создан', 0);
|
|
||||||
finally
|
|
||||||
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTTW_Bot.OnTTWStatus(ASender: TObject; const AStatus: TIdStatus;
|
procedure TTTW_Bot.OnTTWStatus(ASender: TObject; const AStatus: TIdStatus;
|
||||||
@@ -514,8 +517,9 @@ begin
|
|||||||
frOBS1.ChatEmotes.Free;
|
frOBS1.ChatEmotes.Free;
|
||||||
frOBS1.ChatWebServers.Free;
|
frOBS1.ChatWebServers.Free;
|
||||||
frOBS1.EventWebServers.Free;
|
frOBS1.EventWebServers.Free;
|
||||||
frEvents1.CustomRewards.Free;
|
frOBS1.KandinskyWebServers.Free;
|
||||||
kePoints.Free;
|
frRevards1.CustomRewards.Free;
|
||||||
|
kePoints.Free;
|
||||||
DisconnectProcedure;
|
DisconnectProcedure;
|
||||||
if Assigned(ttw_IRS) then
|
if Assigned(ttw_IRS) then
|
||||||
ttw_IRS.Free;
|
ttw_IRS.Free;
|
||||||
@@ -726,6 +730,10 @@ begin
|
|||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
if (TTW_Bot.cbHelloTTS.IsChecked) and (aRecord.FirstMsg = 1) then
|
||||||
|
toSpeech('приветствую, ' + IfThen(aRecord.DisplayName <> '',
|
||||||
|
aRecord.DisplayName, aRecord.Username));
|
||||||
|
|
||||||
firstWord := ExtractFirstWord(processedText);
|
firstWord := ExtractFirstWord(processedText);
|
||||||
if IsCommand(firstWord) then
|
if IsCommand(firstWord) then
|
||||||
begin
|
begin
|
||||||
@@ -1050,6 +1058,7 @@ procedure TTTW_Bot.ReadDB;
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
frSettings1.Init;
|
frSettings1.Init;
|
||||||
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// Загрузка гридов автоматических действий
|
// Загрузка гридов автоматических действий
|
||||||
@@ -1084,9 +1093,20 @@ procedure TTTW_Bot.ReadDB;
|
|||||||
frOBS1.EventWebServers := TList<TEventWebServers>.Create;
|
frOBS1.EventWebServers := TList<TEventWebServers>.Create;
|
||||||
for I := 0 to High(frOBS1.listNotify) do
|
for I := 0 to High(frOBS1.listNotify) do
|
||||||
begin
|
begin
|
||||||
|
|
||||||
frOBS1.CreateWebEvents(frOBS1.listNotify[I]);
|
frOBS1.CreateWebEvents(frOBS1.listNotify[I]);
|
||||||
end;
|
end;
|
||||||
db.LoadRecordArray<TOBSKandinsky>('listKandinsky', frOBS1.listKandinsky);
|
db.LoadRecordArray<TOBSKandinsky>('listKandinsky', frOBS1.listKandinsky);
|
||||||
|
frOBS1.KandinskyWebServers := TList<TKandinskyWebServers>.Create;
|
||||||
|
if (frAI1.edtKandiKey.text <> '') and (frAI1.edtKandiSecret.text <> '') then
|
||||||
|
begin
|
||||||
|
for I := 0 to High(frOBS1.listKandinsky) do
|
||||||
|
begin
|
||||||
|
frOBS1.CreateWebKandinsky(frOBS1.listKandinsky[I]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
frOBS1.UpdateGridFromArray;
|
frOBS1.UpdateGridFromArray;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@@ -1095,11 +1115,11 @@ procedure TTTW_Bot.ReadDB;
|
|||||||
begin
|
begin
|
||||||
db.LoadRecordArray<TEventGlobal>('ListEvents', frEvents1.ListEvents);
|
db.LoadRecordArray<TEventGlobal>('ListEvents', frEvents1.ListEvents);
|
||||||
frEvents1.UpdateGrid;
|
frEvents1.UpdateGrid;
|
||||||
|
frRevards1.CustomRewards := TList<TCustomRevards>.Create;
|
||||||
|
|
||||||
frEvents1.CustomRewards := Tlist<TCustomRevards>.Create;
|
frEvents1.CustomRewardEvents := TList<TCustomRewardEvent>.Create;
|
||||||
// frEvents1.LoadCustomRevards();
|
kePoints := TKE.Create(frEvents1.edtParams, frEvents1.cbKey1,
|
||||||
frEvents1.CustomRewardEvents := Tlist<TCustomRewardEvent>.Create;
|
frEvents1.cbKey2, frEvents1.cbKey3);
|
||||||
kePoints:=TKE.Create(frEvents1.edtParams, frEvents1.cbKey1,frEvents1.cbKey2,frEvents1.cbKey3);
|
|
||||||
frTTS1.btnUpdateVoicesClick(Self);
|
frTTS1.btnUpdateVoicesClick(Self);
|
||||||
frTTS1.cbVoices.ItemIndex := strtoint(db.ReadSetting('cbVoices', '0'));
|
frTTS1.cbVoices.ItemIndex := strtoint(db.ReadSetting('cbVoices', '0'));
|
||||||
frTTS1.cbOutput.ItemIndex := strtoint(db.ReadSetting('cbOutput', '0'));
|
frTTS1.cbOutput.ItemIndex := strtoint(db.ReadSetting('cbOutput', '0'));
|
||||||
@@ -1107,14 +1127,15 @@ procedure TTTW_Bot.ReadDB;
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
LoadSkills;
|
LoadAISettings;
|
||||||
|
LoadSkills;
|
||||||
LoadSettingsComponents;
|
LoadSettingsComponents;
|
||||||
LoadGridsData;
|
LoadGridsData;
|
||||||
LoadGroupNames;
|
LoadGroupNames;
|
||||||
LoadEncryptedConfig;
|
LoadEncryptedConfig;
|
||||||
|
|
||||||
LoadNotifySettings;
|
LoadNotifySettings;
|
||||||
LoadAISettings;
|
|
||||||
LoadOBSGrids;
|
LoadOBSGrids;
|
||||||
LoadAutoActionsGrids;
|
LoadAutoActionsGrids;
|
||||||
end;
|
end;
|
||||||
@@ -1558,11 +1579,14 @@ function TTTW_Bot.ResponsParserAIPic(inMess, aCommandText,
|
|||||||
aNick: string): string;
|
aNick: string): string;
|
||||||
var
|
var
|
||||||
res: string;
|
res: string;
|
||||||
|
I: Integer;
|
||||||
begin
|
begin
|
||||||
res := inMess;
|
res := inMess;
|
||||||
if ContainsText(res, '[Kandinsky]') then
|
if ContainsText(res, '[Kandinsky]') then
|
||||||
begin
|
begin
|
||||||
Kandinsky.generate(aCommandText, aNick);
|
for I := 0 to frOBS1.KandinskyWebServers.Count - 1 do
|
||||||
|
frOBS1.KandinskyWebServers[I].WebServerKandinsky.generate
|
||||||
|
(aCommandText, aNick);
|
||||||
res := StringReplace(res, '[Kandinsky]', '', [rfReplaceAll]);
|
res := StringReplace(res, '[Kandinsky]', '', [rfReplaceAll]);
|
||||||
end;
|
end;
|
||||||
Result := res;
|
Result := res;
|
||||||
|
|||||||
+116
-203
@@ -7,7 +7,8 @@ uses
|
|||||||
System.Variants, System.Generics.Collections, ShellAPI, uSoundManager,
|
System.Variants, System.Generics.Collections, ShellAPI, uSoundManager,
|
||||||
FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls,
|
FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls,
|
||||||
FMX.Edit, FMX.ListBox, FMX.Controls.Presentation, System.Rtti, FMX.Grid.Style,
|
FMX.Edit, FMX.ListBox, FMX.Controls.Presentation, System.Rtti, FMX.Grid.Style,
|
||||||
FMX.ScrollBox, FMX.Grid, uRecords, uDataBase, FMX.Menus, uKeyEvent;
|
FMX.ScrollBox, FMX.Grid, uRecords, uDataBase, FMX.Menus, uKeyEvent,
|
||||||
|
fColorSettings, fFontSettings;
|
||||||
|
|
||||||
type
|
type
|
||||||
TfrEvents = class(TFrame)
|
TfrEvents = class(TFrame)
|
||||||
@@ -42,16 +43,13 @@ type
|
|||||||
procedure MenuItem1Click(Sender: TObject);
|
procedure MenuItem1Click(Sender: TObject);
|
||||||
procedure cbActionsChange(Sender: TObject);
|
procedure cbActionsChange(Sender: TObject);
|
||||||
private
|
private
|
||||||
{ Private declarations }
|
procedure toLog(aCode: integer; aMethod, aMess: string);
|
||||||
procedure toLog(aCode: integer; aMethod: string; aMess: string);
|
procedure ExecuteAction(const aAction: integer; const aParam, aUserInput, aUserName, aUserLogin: string);
|
||||||
public
|
public
|
||||||
{ Public declarations }
|
|
||||||
ListEvents: TArray<TEventGlobal>;
|
ListEvents: TArray<TEventGlobal>;
|
||||||
CustomRewards: Tlist<TCustomRevards>;
|
CustomRewardEvents: TList<TCustomRewardEvent>;
|
||||||
CustomRewardEvents: Tlist<TCustomRewardEvent>;
|
|
||||||
|
|
||||||
procedure UpdateGrid;
|
procedure UpdateGrid;
|
||||||
procedure LoadCustomRevards();
|
|
||||||
procedure ESOnGetCustomReward(CustomReward: TCustomRewardEvent);
|
procedure ESOnGetCustomReward(CustomReward: TCustomRewardEvent);
|
||||||
procedure OnDonate(aNick, aMessage, aSum: string);
|
procedure OnDonate(aNick, aMessage, aSum: string);
|
||||||
end;
|
end;
|
||||||
@@ -62,36 +60,40 @@ implementation
|
|||||||
|
|
||||||
uses uGeneral;
|
uses uGeneral;
|
||||||
|
|
||||||
|
{ --- UI --- }
|
||||||
|
|
||||||
procedure TfrEvents.btnAddClick(Sender: TObject);
|
procedure TfrEvents.btnAddClick(Sender: TObject);
|
||||||
var
|
var
|
||||||
NewRec: TEventGlobal;
|
NewRec: TEventGlobal;
|
||||||
begin
|
begin
|
||||||
if (cbEventList.Text = '') or (cbActions.Text = '') then
|
if (cbEventList.ItemIndex < 0) or (cbActions.ItemIndex < 0) then
|
||||||
exit;
|
Exit;
|
||||||
|
|
||||||
NewRec.Event := cbEventList.ItemIndex;
|
NewRec.Event := cbEventList.ItemIndex;
|
||||||
NewRec.Action := cbActions.ItemIndex;
|
NewRec.Action := cbActions.ItemIndex;
|
||||||
NewRec.Param := edtParams.Text;
|
NewRec.Param := edtParams.Text;
|
||||||
|
|
||||||
if edtIF.Visible then
|
if edtIF.Visible then
|
||||||
NewRec.Condition := edtIF.Text;
|
NewRec.Condition := edtIF.Text
|
||||||
if cbRevards.Visible then
|
else if cbRevards.Visible then
|
||||||
NewRec.Condition := cbRevards.Text;
|
NewRec.Condition := cbRevards.Text;
|
||||||
|
|
||||||
SetLength(ListEvents, Length(ListEvents) + 1);
|
ListEvents := ListEvents + [NewRec];
|
||||||
ListEvents[High(ListEvents)] := NewRec;
|
|
||||||
DB.SaveRecordArray<TEventGlobal>('ListEvents', ListEvents);
|
DB.SaveRecordArray<TEventGlobal>('ListEvents', ListEvents);
|
||||||
UpdateGrid;
|
UpdateGrid;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrEvents.btnDeleteClick(Sender: TObject);
|
procedure TfrEvents.btnDeleteClick(Sender: TObject);
|
||||||
var
|
var
|
||||||
i, RowIndex: integer;
|
RowIndex: integer;
|
||||||
begin
|
begin
|
||||||
RowIndex := sgEvents.Row;
|
RowIndex := sgEvents.Row;
|
||||||
if (RowIndex < 0) or (RowIndex > High(ListEvents)) then
|
if (RowIndex < 0) or (RowIndex > High(ListEvents)) then
|
||||||
exit;
|
Exit;
|
||||||
for i := RowIndex to High(ListEvents) - 1 do
|
|
||||||
ListEvents[i] := ListEvents[i + 1];
|
Delete(ListEvents, RowIndex, 1);
|
||||||
SetLength(ListEvents, Length(ListEvents) - 1);
|
|
||||||
DB.SaveRecordArray<TEventGlobal>('ListEvents', ListEvents);
|
DB.SaveRecordArray<TEventGlobal>('ListEvents', ListEvents);
|
||||||
UpdateGrid;
|
UpdateGrid;
|
||||||
end;
|
end;
|
||||||
@@ -106,82 +108,77 @@ begin
|
|||||||
edtIF.Visible := cbEventList.ItemIndex = 0;
|
edtIF.Visible := cbEventList.ItemIndex = 0;
|
||||||
cbRevards.Visible := cbEventList.ItemIndex = 1;
|
cbRevards.Visible := cbEventList.ItemIndex = 1;
|
||||||
Label2.Visible := cbEventList.ItemIndex <= 1;
|
Label2.Visible := cbEventList.ItemIndex <= 1;
|
||||||
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrEvents.ESOnGetCustomReward(CustomReward: TCustomRewardEvent);
|
procedure TfrEvents.MenuItem1Click(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if OpenDialog1.Execute and (PopupMenu1.PopupComponent is TEdit) then
|
||||||
|
TEdit(PopupMenu1.PopupComponent).Text := OpenDialog1.FileName;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ --- Îáùàÿ ëîãèêà --- }
|
||||||
|
|
||||||
|
procedure TfrEvents.ExecuteAction(const aAction: integer; const aParam, aUserInput, aUserName, aUserLogin: string);
|
||||||
var
|
var
|
||||||
i, i2: integer;
|
|
||||||
req, s: string;
|
|
||||||
hr: TCustomRewardEvent;
|
|
||||||
sm: TSongMachine;
|
sm: TSongMachine;
|
||||||
myAction: integer;
|
f: TfrColorSettings;
|
||||||
|
t: TfrFontSettings;
|
||||||
|
i, j: Integer;
|
||||||
|
notify: TOBSNotify;
|
||||||
|
se: TStyleEvent;
|
||||||
begin
|
begin
|
||||||
sm := TSongMachine.Create;
|
sm := TSongMachine.Create;
|
||||||
try
|
try
|
||||||
toLog(3, 'ESOnGetCustomReward', 'Íà÷àëî îáðàáîòêè íàãðàäû: ' +
|
case aAction of
|
||||||
CustomReward.Event.revard.Title);
|
0: begin // Íàæàòü êíîïêó
|
||||||
s := '[' + CustomReward.Event.user_name +
|
toLog(0, 'ExecuteAction', 'Ñèìóëÿöèÿ íàæàòèÿ: ' + aParam);
|
||||||
'] êóïèë çà áàëëû êàíàëà íàãðàäó "' +
|
kePoints.SimulateKeyPress(aParam, 500);
|
||||||
CustomReward.Event.revard.Title + '" ';
|
end;
|
||||||
if CustomReward.Event.user_input <> '' then
|
1: begin // Âîñïðîèçâåäåíèå çâóêà
|
||||||
|
toLog(0, 'ExecuteAction', 'Âîñïðîèçâåäåíèå çâóêà: ' + aParam);
|
||||||
|
sm.PlayPublic(aParam, '100');
|
||||||
|
end;
|
||||||
|
2: begin // Kandinsky
|
||||||
|
toLog(0, 'ExecuteAction', 'Ãåíåðàöèÿ Kandinsky äëÿ: ' + aUserInput);
|
||||||
|
Kandinsky.generate(aUserInput, aUserLogin);
|
||||||
|
end;
|
||||||
|
3: begin // OBS Notify
|
||||||
|
f := TfrColorSettings.Create(Self);
|
||||||
|
t := TfrFontSettings.Create(Self);
|
||||||
|
try
|
||||||
|
for i := 0 to High(TTW_Bot.frOBS1.listNotify) do
|
||||||
|
if TTW_Bot.frOBS1.listNotify[i].TypeEvent = 5 then
|
||||||
begin
|
begin
|
||||||
toLog(0, 'ESOnGetCustomReward', 'Ïîëüçîâàòåëüñêèé ââîä: ' +
|
notify := TTW_Bot.frOBS1.listNotify[i];
|
||||||
CustomReward.Event.user_input);
|
se.Title := StringReplace(notify.HeaderText, '[NICK]', aUserName, [rfReplaceAll]);
|
||||||
s := s + ' è ïåðåäàë ñòðîêó ' + CustomReward.Event.user_input
|
se.Context := notify.MessText;
|
||||||
end;
|
se.Url := notify.Picture;
|
||||||
|
se.SoundURL := notify.Sound;
|
||||||
|
se.Timestamp := Now;
|
||||||
|
se.TimeMsg := notify.TimeMess;
|
||||||
|
se.BorderColor := notify.ColorBorder;
|
||||||
|
se.BorderSize := notify.SolidBorder;
|
||||||
|
se.BlockColor := notify.ColorBlock;
|
||||||
|
se.FontTitle.Font := notify.HeaderStyleFont;
|
||||||
|
se.FontTitle.Size := notify.HeaderSizeFont;
|
||||||
|
se.FontTitle.Color := notify.HeaderColorFont;
|
||||||
|
se.FontContext.Font := notify.MessStyleFont;
|
||||||
|
se.FontContext.Size := notify.MessSizeFont;
|
||||||
|
se.FontContext.Color := notify.MessColorFont;
|
||||||
|
se.RequireInteraction := True;
|
||||||
|
|
||||||
for i := 0 to high(ListEvents) do
|
for j := 0 to TTW_Bot.frOBS1.EventWebServers.Count - 1 do
|
||||||
begin
|
TTW_Bot.frOBS1.EventWebServers[j].WebServerChat.AddMessage(se);
|
||||||
if ListEvents[i].Event <> 1 then
|
|
||||||
continue;
|
|
||||||
if ListEvents[i].Condition = CustomReward.Event.revard.Title then
|
|
||||||
begin
|
|
||||||
myAction := ListEvents[i].Action;
|
|
||||||
|
|
||||||
{
|
|
||||||
0 Íàæàòü íêîïêó íà êëàâèàòóðå
|
|
||||||
1 Ïðîèãðàòü çâóê
|
|
||||||
2 Kandinsky
|
|
||||||
3 Çàïóñòèòü Web Event
|
|
||||||
4 Íàïèñàòü â ÷àò
|
|
||||||
5 Çàïóñòèòü ïðîãðàììó
|
|
||||||
|
|
||||||
}
|
|
||||||
case myAction of
|
|
||||||
0:
|
|
||||||
begin // íàæàòü êíîïêó
|
|
||||||
toLog(0, 'ESOnGetCustomReward', 'Ñèìóëÿöèÿ íàæàòèÿ: ' +
|
|
||||||
ListEvents[i].Param);
|
|
||||||
kePoints.SimulateKeyPress(ListEvents[i].Param, 500);
|
|
||||||
end;
|
end;
|
||||||
1:
|
finally
|
||||||
begin // âîñïðîèçâåäåíèå çâóêà
|
f.Free;
|
||||||
toLog(0, 'ESOnGetCustomReward', 'Âîñïðîèçâåäåíèå çâóêà: ' +
|
t.Free;
|
||||||
ListEvents[i].Param);
|
|
||||||
sm.PlayPublic(ListEvents[i].Param, '100');
|
|
||||||
end;
|
|
||||||
2:
|
|
||||||
begin // Kandinsky
|
|
||||||
toLog(0, 'ESOnGetCustomReward', 'Ãåíåðàöèÿ Kandinsky äëÿ: ' +
|
|
||||||
CustomReward.Event.user_input);
|
|
||||||
Kandinsky.generate(CustomReward.Event.user_input,
|
|
||||||
CustomReward.Event.user_login);
|
|
||||||
end;
|
|
||||||
4:
|
|
||||||
begin // Íàïèñàòü â ÷àò
|
|
||||||
|
|
||||||
toLog(0, 'ESOnGetCustomReward', 'Íàïèñàòü â ÷àò: ' +
|
|
||||||
CustomReward.Event.user_input);
|
|
||||||
end;
|
|
||||||
5:
|
|
||||||
begin // çàïóñê ôàéëà
|
|
||||||
toLog(0, 'ESOnGetCustomReward', 'Çàïóñê ôàéëà: ' + ListEvents
|
|
||||||
[i].Param);
|
|
||||||
ShellExecute(0, 'open', pwidechar(ListEvents[i].Param),
|
|
||||||
nil, nil, 0);
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
4: toLog(0, 'ExecuteAction', 'Íàïèñàòü â ÷àò: ' + aUserInput);
|
||||||
|
5: begin // Çàïóñê ôàéëà
|
||||||
|
toLog(0, 'ExecuteAction', 'Çàïóñê ôàéëà: ' + aParam);
|
||||||
|
ShellExecute(0, 'open', PWideChar(aParam), nil, nil, 0);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
finally
|
finally
|
||||||
@@ -189,83 +186,46 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrEvents.LoadCustomRevards();
|
procedure TfrEvents.ESOnGetCustomReward(CustomReward: TCustomRewardEvent);
|
||||||
var
|
var
|
||||||
cr: TCustomRevards;
|
ev: TEventGlobal;
|
||||||
begin
|
begin
|
||||||
CustomRewards.Clear;
|
toLog(3, 'ESOnGetCustomReward', 'Íà÷àëî îáðàáîòêè íàãðàäû: ' + CustomReward.Event.revard.Title);
|
||||||
cbRevards.Items.Clear;
|
|
||||||
TTW_Bot.toLog('fEvents', 'LoadCustomRevards', 'Çàïðîñ íàãðàä ñ ñåðâåðà', 3);
|
|
||||||
ttw_API.getCustomReward(CustomRewards);
|
|
||||||
for cr in CustomRewards do
|
|
||||||
begin
|
|
||||||
cbRevards.Items.Add(cr.Title);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TfrEvents.MenuItem1Click(Sender: TObject);
|
for ev in ListEvents do
|
||||||
begin
|
if (ev.Event = 1) and (ev.Condition = CustomReward.Event.revard.Title) then
|
||||||
if OpenDialog1.Execute then
|
ExecuteAction(ev.Action, ev.Param, CustomReward.Event.user_input, CustomReward.Event.user_name, CustomReward.Event.user_login);
|
||||||
TEdit(PopupMenu1.PopupComponent).Text := OpenDialog1.FileName;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrEvents.OnDonate(aNick, aMessage, aSum: string);
|
procedure TfrEvents.OnDonate(aNick, aMessage, aSum: string);
|
||||||
var
|
var
|
||||||
i, i2: integer;
|
i, aSumInt, BestRow, BestPriority, BestValue,
|
||||||
req, s: string;
|
CurrentPriority, CurrentValue, MinVal, MaxVal: integer;
|
||||||
hr: TCustomRewardEvent;
|
|
||||||
sm: TSongMachine;
|
|
||||||
myAction: integer;
|
|
||||||
|
|
||||||
j: integer;
|
|
||||||
aSumInt: integer;
|
|
||||||
BestRow: integer;
|
|
||||||
BestPriority: integer;
|
|
||||||
BestValue: integer;
|
|
||||||
Condition: string;
|
Condition: string;
|
||||||
CurrentPriority: integer;
|
Parts: TStringList;
|
||||||
CurrentValue: integer;
|
|
||||||
MinVal, MaxVal: integer;
|
|
||||||
Parts: tstringlist;
|
|
||||||
se: TStyleEvent;
|
|
||||||
notify: TEventGlobal;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
|
||||||
aSumInt := StrToIntDef(aSum, 0);
|
aSumInt := StrToIntDef(aSum, 0);
|
||||||
BestRow := -1;
|
BestRow := -1;
|
||||||
BestPriority := -1;
|
BestPriority := -1;
|
||||||
BestValue := 0;
|
BestValue := 0;
|
||||||
|
|
||||||
for i := 0 to high(ListEvents) do
|
for i := 0 to High(ListEvents) do
|
||||||
begin
|
|
||||||
if ListEvents[i].Event = 0 then
|
|
||||||
begin
|
begin
|
||||||
|
if ListEvents[i].Event <> 0 then
|
||||||
|
Continue;
|
||||||
|
|
||||||
Condition := ListEvents[i].Condition;
|
Condition := ListEvents[i].Condition;
|
||||||
CurrentPriority := -1;
|
CurrentPriority := -1;
|
||||||
CurrentValue := 0;
|
CurrentValue := 0;
|
||||||
|
|
||||||
// Ïðîâåðêà íà òî÷íîå çíà÷åíèå
|
if TryStrToInt(Condition, CurrentValue) then
|
||||||
if Pos('-', Condition) = 0 then
|
|
||||||
begin
|
begin
|
||||||
if Pos('>', Condition) = 0 then
|
|
||||||
begin
|
|
||||||
if Pos('<', Condition) = 0 then
|
|
||||||
begin
|
|
||||||
// Òî÷íîå çíà÷åíèå
|
|
||||||
CurrentValue := StrToIntDef(Condition, -1);
|
|
||||||
if aSumInt = CurrentValue then
|
if aSumInt = CurrentValue then
|
||||||
CurrentPriority := 4;
|
CurrentPriority := 4;
|
||||||
end;
|
end
|
||||||
end;
|
else if Pos('-', Condition) > 0 then
|
||||||
end;
|
|
||||||
|
|
||||||
if CurrentPriority = -1 then
|
|
||||||
begin
|
begin
|
||||||
if Pos('-', Condition) > 0 then
|
Parts := TStringList.Create;
|
||||||
begin
|
|
||||||
// Äèàïàçîí
|
|
||||||
Parts := tstringlist.Create;
|
|
||||||
try
|
try
|
||||||
Parts.Delimiter := '-';
|
Parts.Delimiter := '-';
|
||||||
Parts.StrictDelimiter := True;
|
Parts.StrictDelimiter := True;
|
||||||
@@ -277,94 +237,43 @@ begin
|
|||||||
if (aSumInt >= MinVal) and (aSumInt <= MaxVal) then
|
if (aSumInt >= MinVal) and (aSumInt <= MaxVal) then
|
||||||
begin
|
begin
|
||||||
CurrentPriority := 3;
|
CurrentPriority := 3;
|
||||||
CurrentValue := MinVal; // Ïðèîðèòåò ïî MinVal
|
CurrentValue := MinVal;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
finally
|
finally
|
||||||
Parts.Free;
|
Parts.Free;
|
||||||
end;
|
end;
|
||||||
end
|
end
|
||||||
else if Pos('>', Condition) > 0 then
|
else if (Condition.StartsWith('>')) then
|
||||||
begin
|
begin
|
||||||
// Óñëîâèå ">X"
|
CurrentValue := StrToIntDef(Copy(Condition, 2), 0);
|
||||||
CurrentValue :=
|
|
||||||
StrToIntDef(Trim(StringReplace(Condition, '>', '',
|
|
||||||
[rfReplaceAll])), 0);
|
|
||||||
if aSumInt >= CurrentValue then
|
if aSumInt >= CurrentValue then
|
||||||
CurrentPriority := 2;
|
CurrentPriority := 2;
|
||||||
end
|
end
|
||||||
else if Pos('<', Condition) > 0 then
|
else if (Condition.StartsWith('<')) then
|
||||||
begin
|
begin
|
||||||
// Óñëîâèå "<X"
|
CurrentValue := StrToIntDef(Copy(Condition, 2), 0);
|
||||||
CurrentValue :=
|
|
||||||
StrToIntDef(Trim(StringReplace(Condition, '<', '',
|
|
||||||
[rfReplaceAll])), 0);
|
|
||||||
if aSumInt <= CurrentValue then
|
if aSumInt <= CurrentValue then
|
||||||
CurrentPriority := 1;
|
CurrentPriority := 1;
|
||||||
end;
|
end;
|
||||||
end;
|
|
||||||
|
|
||||||
if CurrentPriority <> -1 then
|
if (CurrentPriority <> -1) and
|
||||||
begin
|
((CurrentPriority > BestPriority) or
|
||||||
// Îïðåäåëåíèå íàèëó÷øåãî óñëîâèÿ
|
((CurrentPriority = BestPriority) and
|
||||||
if (CurrentPriority > BestPriority) or (CurrentPriority = BestPriority)
|
(((CurrentPriority in [2,3]) and (CurrentValue > BestValue)) or
|
||||||
and ((CurrentPriority = 3) and (CurrentValue > BestValue) or
|
((CurrentPriority = 1) and (CurrentValue < BestValue))))) then
|
||||||
(CurrentPriority = 2) and (CurrentValue > BestValue) or
|
|
||||||
(CurrentPriority = 1) and (CurrentValue < BestValue)) then
|
|
||||||
begin
|
begin
|
||||||
BestPriority := CurrentPriority;
|
BestPriority := CurrentPriority;
|
||||||
BestValue := CurrentValue;
|
BestValue := CurrentValue;
|
||||||
BestRow := i;
|
BestRow := i;
|
||||||
notify := ListEvents[i];
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
if BestRow = -1 then
|
|
||||||
Break;
|
|
||||||
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
if BestRow = -1 then
|
|
||||||
exit;
|
|
||||||
sm := TSongMachine.Create;
|
|
||||||
try
|
|
||||||
myAction := ListEvents[i].Action;
|
|
||||||
case myAction of
|
|
||||||
0:
|
|
||||||
begin // íàæàòü êíîïêó
|
|
||||||
toLog(0, 'OnDonate', 'Ñèìóëÿöèÿ íàæàòèÿ: ' + ListEvents[i].Param);
|
|
||||||
kePoints.SimulateKeyPress(ListEvents[i].Param, 500);
|
|
||||||
end;
|
|
||||||
1:
|
|
||||||
begin // âîñïðîèçâåäåíèå çâóêà
|
|
||||||
toLog(0, 'OnDonate', 'Âîñïðîèçâåäåíèå çâóêà: ' + ListEvents[i].Param);
|
|
||||||
sm.PlayPublic(ListEvents[i].Param, '100');
|
|
||||||
end;
|
|
||||||
2:
|
|
||||||
begin // Kandinsky
|
|
||||||
toLog(0, 'OnDonate', 'Ãåíåðàöèÿ Kandinsky äëÿ: ' + aNick);
|
|
||||||
Kandinsky.generate(aMessage, aNick);
|
|
||||||
end;
|
|
||||||
4:
|
|
||||||
begin // Íàïèñàòü â ÷àò
|
|
||||||
|
|
||||||
toLog(0, 'OnDonate', 'Íàïèñàòü â ÷àò: ' + aNick);
|
|
||||||
end;
|
|
||||||
5:
|
|
||||||
begin // çàïóñê ôàéëà
|
|
||||||
toLog(0, 'OnDonate', 'Çàïóñê ôàéëà: ' + ListEvents[i].Param);
|
|
||||||
ShellExecute(0, 'open', pwidechar(ListEvents[i].Param), nil, nil, 0);
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
finally
|
if BestRow <> -1 then
|
||||||
sm.Free;
|
ExecuteAction(ListEvents[BestRow].Action, ListEvents[BestRow].Param, aMessage, aNick, aNick);
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrEvents.toLog(aCode: integer; aMethod, aMess: string);
|
|
||||||
begin
|
|
||||||
TTW_Bot.toLog('fEvents', aMethod, aMess, aCode);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TfrEvents.UpdateGrid;
|
procedure TfrEvents.UpdateGrid;
|
||||||
var
|
var
|
||||||
@@ -372,11 +281,9 @@ var
|
|||||||
begin
|
begin
|
||||||
sgEvents.BeginUpdate;
|
sgEvents.BeginUpdate;
|
||||||
try
|
try
|
||||||
sgEvents.RowCount := 0; // Ñáðàñûâàåì ñòðîêè (îñòàâëÿåì òîëüêî çàãîëîâêè)
|
sgEvents.RowCount := Length(ListEvents);
|
||||||
|
|
||||||
for i := 0 to High(ListEvents) do
|
for i := 0 to High(ListEvents) do
|
||||||
begin
|
begin
|
||||||
sgEvents.RowCount := i + 1;
|
|
||||||
sgEvents.Cells[0, i] := cbEventList.Items[ListEvents[i].Event];
|
sgEvents.Cells[0, i] := cbEventList.Items[ListEvents[i].Event];
|
||||||
sgEvents.Cells[1, i] := ListEvents[i].Condition;
|
sgEvents.Cells[1, i] := ListEvents[i].Condition;
|
||||||
sgEvents.Cells[2, i] := cbActions.Items[ListEvents[i].Action];
|
sgEvents.Cells[2, i] := cbActions.Items[ListEvents[i].Action];
|
||||||
@@ -387,4 +294,10 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TfrEvents.toLog(aCode: integer; aMethod, aMess: string);
|
||||||
|
begin
|
||||||
|
TTW_Bot.toLog('fEvents', aMethod, aMess, aCode);
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -14,8 +14,8 @@ object frOBS: TfrOBS
|
|||||||
RowCount = 0
|
RowCount = 0
|
||||||
Options = [ColumnResize, ColumnMove, ColLines, RowLines, Tabs, Header, HeaderClick, AutoDisplacement]
|
Options = [ColumnResize, ColumnMove, ColLines, RowLines, Tabs, Header, HeaderClick, AutoDisplacement]
|
||||||
OnCellDblClick = sgWebChatsCellDblClick
|
OnCellDblClick = sgWebChatsCellDblClick
|
||||||
Viewport.Width = 685.000000000000000000
|
Viewport.Width = 689.000000000000000000
|
||||||
Viewport.Height = 164.000000000000000000
|
Viewport.Height = 189.000000000000000000
|
||||||
object IntegerColumn1: TIntegerColumn
|
object IntegerColumn1: TIntegerColumn
|
||||||
Header = #1055#1086#1088#1090
|
Header = #1055#1086#1088#1090
|
||||||
HeaderSettings.TextSettings.WordWrap = False
|
HeaderSettings.TextSettings.WordWrap = False
|
||||||
|
|||||||
+166
-343
@@ -5,11 +5,12 @@ interface
|
|||||||
uses
|
uses
|
||||||
System.SysUtils, System.Types, System.UITypes, System.Classes, uCustomEmoties,
|
System.SysUtils, System.Types, System.UITypes, System.Classes, uCustomEmoties,
|
||||||
System.Variants, uWebServerChat, uWebServerEvents, fColorSettings,
|
System.Variants, uWebServerChat, uWebServerEvents, fColorSettings,
|
||||||
System.Generics.Collections,
|
fFontSettings,
|
||||||
|
System.Generics.Collections, uWebServerKandinsky,
|
||||||
FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls,
|
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,
|
System.Rtti, FMX.Grid.Style, FMX.Grid, FMX.ScrollBox, FMX.Edit, FMX.Colors,
|
||||||
FMX.ListBox, FMX.EditBox, FMX.SpinBox, FMX.Controls.Presentation, uRecords,
|
FMX.ListBox, FMX.EditBox, FMX.SpinBox, FMX.Controls.Presentation, uRecords,
|
||||||
System.Generics.Defaults, fFontSettings, System.Character;
|
System.Generics.Defaults, System.Character;
|
||||||
|
|
||||||
type
|
type
|
||||||
TChatWebServers = record
|
TChatWebServers = record
|
||||||
@@ -31,10 +32,17 @@ type
|
|||||||
type
|
type
|
||||||
TEventWebServers = record
|
TEventWebServers = record
|
||||||
port: integer;
|
port: integer;
|
||||||
|
typeEvent: integer;
|
||||||
se: TStyleEvent;
|
se: TStyleEvent;
|
||||||
WebServerChat: TTTW_Events;
|
WebServerChat: TTTW_Events;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
type
|
||||||
|
TKandinskyWebServers = record
|
||||||
|
port: integer;
|
||||||
|
WebServerKandinsky: TKandinsky_Web;
|
||||||
|
end;
|
||||||
|
|
||||||
type
|
type
|
||||||
TfrOBS = class(TFrame)
|
TfrOBS = class(TFrame)
|
||||||
sgWebChats: TStringGrid;
|
sgWebChats: TStringGrid;
|
||||||
@@ -71,11 +79,12 @@ type
|
|||||||
ChatEmotes: Tlist<TEmotes>;
|
ChatEmotes: Tlist<TEmotes>;
|
||||||
ChatWebServers: Tlist<TChatWebServers>;
|
ChatWebServers: Tlist<TChatWebServers>;
|
||||||
EventWebServers: Tlist<TEventWebServers>;
|
EventWebServers: Tlist<TEventWebServers>;
|
||||||
|
KandinskyWebServers: Tlist<TKandinskyWebServers>;
|
||||||
procedure MsgToWebServer(const aRecord: TTwitchChatMessage);
|
procedure MsgToWebServer(const aRecord: TTwitchChatMessage);
|
||||||
procedure toEventWebServer(CustomReward: TFollowEvent); overload; // follow
|
procedure toEventWebServer(aEvent: TFollowEvent); overload; // follow
|
||||||
procedure toEventWebServer(CustomReward: TSubEvent); overload; // sub
|
procedure toEventWebServer(aEvent: TSubEvent); overload; // sub
|
||||||
procedure toEventWebServer(CustomReward: TRaidEvent); overload; // raid
|
procedure toEventWebServer(aEvent: TRaidEvent); overload; // raid
|
||||||
procedure toEventWebServer(CustomReward: TGiftEvent); overload; // gift
|
procedure toEventWebServer(aEvent: TGiftEvent); overload; // gift
|
||||||
procedure toEventWebServer(aNick, aSum, aText: string); overload; // donate
|
procedure toEventWebServer(aNick, aSum, aText: string); overload; // donate
|
||||||
procedure CreateWebEvents(eventsSettings: TOBSNotify);
|
procedure CreateWebEvents(eventsSettings: TOBSNotify);
|
||||||
|
|
||||||
@@ -91,7 +100,7 @@ type
|
|||||||
|
|
||||||
procedure AddKandinsky(newRecord: TOBSKandinsky);
|
procedure AddKandinsky(newRecord: TOBSKandinsky);
|
||||||
procedure DelKandinsky(aPort: integer);
|
procedure DelKandinsky(aPort: integer);
|
||||||
|
procedure CreateWebKandinsky(aRecord: TOBSKandinsky);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
@@ -290,6 +299,7 @@ begin
|
|||||||
SetLength(listChats, Length(listChats) + 1);
|
SetLength(listChats, Length(listChats) + 1);
|
||||||
listChats[High(listChats)] := newRecord;
|
listChats[High(listChats)] := newRecord;
|
||||||
UpdateGridFromArray;
|
UpdateGridFromArray;
|
||||||
|
|
||||||
db.SaveRecordArray<TOBSChat>('listChats', listChats);
|
db.SaveRecordArray<TOBSChat>('listChats', listChats);
|
||||||
CreateWebChat(newRecord);
|
CreateWebChat(newRecord);
|
||||||
end;
|
end;
|
||||||
@@ -300,6 +310,7 @@ begin
|
|||||||
listKandinsky[High(listKandinsky)] := newRecord;
|
listKandinsky[High(listKandinsky)] := newRecord;
|
||||||
UpdateGridFromArray;
|
UpdateGridFromArray;
|
||||||
db.SaveRecordArray<TOBSKandinsky>('listKandinsky', listKandinsky);
|
db.SaveRecordArray<TOBSKandinsky>('listKandinsky', listKandinsky);
|
||||||
|
CreateWebKandinsky(newRecord);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrOBS.AddNotify(newRecord: TOBSNotify);
|
procedure TfrOBS.AddNotify(newRecord: TOBSNotify);
|
||||||
@@ -383,12 +394,10 @@ var
|
|||||||
procedure LoadFontList(const mySL: tstringlist);
|
procedure LoadFontList(const mySL: tstringlist);
|
||||||
var
|
var
|
||||||
SearchRec: TSearchRec;
|
SearchRec: TSearchRec;
|
||||||
n: integer;
|
|
||||||
begin
|
begin
|
||||||
if not DirectoryExists(myConst.fontsPath) then
|
if not DirectoryExists(myConst.fontsPath) then
|
||||||
CreateDir(myConst.fontsPath);
|
CreateDir(myConst.fontsPath);
|
||||||
|
|
||||||
n := 1;
|
|
||||||
if FindFirst(IncludeTrailingPathDelimiter(myConst.fontsPath) + '*.*',
|
if FindFirst(IncludeTrailingPathDelimiter(myConst.fontsPath) + '*.*',
|
||||||
faArchive, SearchRec) = 0 then
|
faArchive, SearchRec) = 0 then
|
||||||
try
|
try
|
||||||
@@ -396,7 +405,6 @@ var
|
|||||||
if (SearchRec.Attr and faAnyFile) = SearchRec.Attr then
|
if (SearchRec.Attr and faAnyFile) = SearchRec.Attr then
|
||||||
begin
|
begin
|
||||||
mySL.Add(SearchRec.name);
|
mySL.Add(SearchRec.name);
|
||||||
Inc(n);
|
|
||||||
end;
|
end;
|
||||||
until FindNext(SearchRec) <> 0;
|
until FindNext(SearchRec) <> 0;
|
||||||
finally
|
finally
|
||||||
@@ -448,12 +456,9 @@ var
|
|||||||
procedure LoadFontList(const mySL: tstringlist);
|
procedure LoadFontList(const mySL: tstringlist);
|
||||||
var
|
var
|
||||||
SearchRec: TSearchRec;
|
SearchRec: TSearchRec;
|
||||||
n: integer;
|
|
||||||
begin
|
begin
|
||||||
if not DirectoryExists(myConst.fontsPath) then
|
if not DirectoryExists(myConst.fontsPath) then
|
||||||
CreateDir(myConst.fontsPath);
|
CreateDir(myConst.fontsPath);
|
||||||
|
|
||||||
n := 1;
|
|
||||||
if FindFirst(IncludeTrailingPathDelimiter(myConst.fontsPath) + '*.*',
|
if FindFirst(IncludeTrailingPathDelimiter(myConst.fontsPath) + '*.*',
|
||||||
faArchive, SearchRec) = 0 then
|
faArchive, SearchRec) = 0 then
|
||||||
try
|
try
|
||||||
@@ -461,7 +466,6 @@ var
|
|||||||
if (SearchRec.Attr and faAnyFile) = SearchRec.Attr then
|
if (SearchRec.Attr and faAnyFile) = SearchRec.Attr then
|
||||||
begin
|
begin
|
||||||
mySL.Add(SearchRec.name);
|
mySL.Add(SearchRec.name);
|
||||||
Inc(n);
|
|
||||||
end;
|
end;
|
||||||
until FindNext(SearchRec) <> 0;
|
until FindNext(SearchRec) <> 0;
|
||||||
finally
|
finally
|
||||||
@@ -470,24 +474,37 @@ var
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
function GetColorFromColorPanel(aColor: TAlphaColor): string;
|
function GetColorFromColorPanel(aColor: TAlphaColor): string;
|
||||||
var
|
var
|
||||||
Color: TAlphaColor;
|
Color: TAlphaColor;
|
||||||
r, G, B: Byte;
|
r, G, B: Byte;
|
||||||
A: Real;
|
A: Real;
|
||||||
FS: TFormatSettings;
|
FS: TFormatSettings;
|
||||||
begin
|
begin
|
||||||
Color := aColor;
|
Color := aColor;
|
||||||
r := TAlphaColorRec(Color).r;
|
r := TAlphaColorRec(Color).r;
|
||||||
G := TAlphaColorRec(Color).G;
|
G := TAlphaColorRec(Color).G;
|
||||||
B := TAlphaColorRec(Color).B;
|
B := TAlphaColorRec(Color).B;
|
||||||
A := TAlphaColorRec(Color).A / 255; // Ïðåîáðàçóåì àëüôà-êàíàë â äèàïàçîí 0..1
|
A := TAlphaColorRec(Color).A / 255;
|
||||||
|
// Ïðåîáðàçóåì àëüôà-êàíàë â äèàïàçîí 0..1
|
||||||
|
|
||||||
// Óñòàíàâëèâàåì òî÷êó â êà÷åñòâå äåñÿòè÷íîãî ðàçäåëèòåëÿ
|
// Óñòàíàâëèâàåì òî÷êó â êà÷åñòâå äåñÿòè÷íîãî ðàçäåëèòåëÿ
|
||||||
FS := TFormatSettings.Create;
|
FS := TFormatSettings.Create;
|
||||||
FS.DecimalSeparator := '.';
|
FS.DecimalSeparator := '.';
|
||||||
|
|
||||||
result := Format('rgba(%d, %d, %d, %.2f)', [r, G, B, A], FS);
|
result := Format('rgba(%d, %d, %d, %.2f)', [r, G, B, A], FS);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function GetColorFromCCB(aColor: TAlphaColor): string;
|
||||||
|
var
|
||||||
|
Color: TAlphaColor;
|
||||||
|
r, G, B: Byte;
|
||||||
|
begin
|
||||||
|
Color := aColor;
|
||||||
|
r := TAlphaColorRec(Color).r;
|
||||||
|
G := TAlphaColorRec(Color).G;
|
||||||
|
B := TAlphaColorRec(Color).B;
|
||||||
|
result := Format('#%.2X%.2X%.2X', [r, G, B]);
|
||||||
|
end;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
fonts := tstringlist.Create;
|
fonts := tstringlist.Create;
|
||||||
@@ -495,25 +512,25 @@ begin
|
|||||||
t := TfrFontSettings.Create(self);
|
t := TfrFontSettings.Create(self);
|
||||||
try
|
try
|
||||||
LoadFontList(fonts);
|
LoadFontList(fonts);
|
||||||
EventWebServer.WebServerChat := TTTW_Events.Create(fonts,eventsSettings.port);
|
EventWebServer.WebServerChat := TTTW_Events.Create(fonts,
|
||||||
|
eventsSettings.port);
|
||||||
EventWebServer.port := eventsSettings.port;
|
EventWebServer.port := eventsSettings.port;
|
||||||
|
EventWebServer.typeEvent := eventsSettings.typeEvent;
|
||||||
EventWebServer.se.title := eventsSettings.HeaderText;
|
EventWebServer.se.Title := eventsSettings.HeaderText;
|
||||||
EventWebServer.se.Context:=eventsSettings.MessText;
|
EventWebServer.se.Context := eventsSettings.MessText;
|
||||||
EventWebServer.se.Url:=eventsSettings.Picture;
|
EventWebServer.se.Url := eventsSettings.Picture;
|
||||||
EventWebServer.se.SoundURL:=eventsSettings.Sound;
|
EventWebServer.se.SoundURL := eventsSettings.Sound;
|
||||||
EventWebServer.se.Timestamp:=now;
|
EventWebServer.se.Timestamp := now;
|
||||||
EventWebServer.se.TimeMsg:=eventsSettings.TimeMess;
|
EventWebServer.se.TimeMsg := eventsSettings.TimeMess;
|
||||||
EventWebServer.se.FontTitle.Font:= t.cbFontStyleDefault.Items[eventsSettings.HeaderStyleFont];
|
EventWebServer.se.FontTitle.Font := eventsSettings.HeaderStyleFont;
|
||||||
EventWebServer.se.FontTitle.Size:=eventsSettings.HeaderSizeFont;
|
EventWebServer.se.FontTitle.Size := eventsSettings.HeaderSizeFont;
|
||||||
EventWebServer.se.FontTitle.Color:=t.ccbFontColor.Items[eventsSettings.HeaderColorFont];
|
EventWebServer.se.FontTitle.Color := eventsSettings.HeaderColorFont;
|
||||||
EventWebServer.se.FontContext.Font:= t.cbFontStyleDefault.Items[eventsSettings.MessStyleFont];
|
EventWebServer.se.FontContext.Font := eventsSettings.MessStyleFont;
|
||||||
EventWebServer.se.FontContext.Size:=eventsSettings.MessSizeFont;
|
EventWebServer.se.FontContext.Size := eventsSettings.MessSizeFont;
|
||||||
EventWebServer.se.FontContext.Color:=t.ccbFontColor.Items[eventsSettings.MessColorFont];
|
EventWebServer.se.FontContext.Color :=eventsSettings.MessColorFont;
|
||||||
EventWebServer.se.BorderColor:=f.ccbStyleBorderColor.Items[eventsSettings.ColorBorder];
|
EventWebServer.se.BorderColor := eventsSettings.ColorBorder;
|
||||||
EventWebServer.se.BorderSize:=eventsSettings.SolidBorder;
|
EventWebServer.se.BorderSize := eventsSettings.SolidBorder;
|
||||||
EventWebServer.se.BlockColor:=GetColorFromColorPanel(f.cpStyleBlockColor.Color);
|
EventWebServer.se.BlockColor := eventsSettings.ColorBlock;
|
||||||
|
|
||||||
EventWebServers.Add(EventWebServer);
|
EventWebServers.Add(EventWebServer);
|
||||||
EventWebServers[EventWebServers.Count - 1].WebServerChat.ActiveServer(True);
|
EventWebServers[EventWebServers.Count - 1].WebServerChat.ActiveServer(True);
|
||||||
finally
|
finally
|
||||||
@@ -523,6 +540,20 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TfrOBS.CreateWebKandinsky(aRecord: TOBSKandinsky);
|
||||||
|
var
|
||||||
|
KandinskyWebServer: TKandinskyWebServers;
|
||||||
|
begin
|
||||||
|
KandinskyWebServer.port := aRecord.port;
|
||||||
|
KandinskyWebServer.WebServerKandinsky :=
|
||||||
|
TKandinsky_Web.Create(TTW_Bot.frAI1.edtKandiKey.text,
|
||||||
|
TTW_Bot.frAI1.edtKandiSecret.text, aRecord.port);
|
||||||
|
KandinskyWebServers.Add(KandinskyWebServer);
|
||||||
|
KandinskyWebServers[KandinskyWebServers.Count - 1]
|
||||||
|
.WebServerKandinsky.ActiveServer(True);
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TfrOBS.DelChat(aPort: integer);
|
procedure TfrOBS.DelChat(aPort: integer);
|
||||||
var
|
var
|
||||||
i, j: integer;
|
i, j: integer;
|
||||||
@@ -566,6 +597,9 @@ begin
|
|||||||
Break;
|
Break;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
KandinskyWebServers[i].WebServerKandinsky.ActiveServer(false);
|
||||||
|
KandinskyWebServers[i].WebServerKandinsky.Destroy;
|
||||||
|
KandinskyWebServers.Delete(i);
|
||||||
UpdateGridFromArray;
|
UpdateGridFromArray;
|
||||||
db.SaveRecordArray<TOBSKandinsky>('listKandinsky', listKandinsky);
|
db.SaveRecordArray<TOBSKandinsky>('listKandinsky', listKandinsky);
|
||||||
end;
|
end;
|
||||||
@@ -588,7 +622,9 @@ begin
|
|||||||
Break;
|
Break;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
EventWebServers[i].WebServerChat.ActiveServer(false);
|
||||||
|
EventWebServers[i].WebServerChat.Destroy;
|
||||||
|
EventWebServers.Delete(i);
|
||||||
UpdateGridFromArray;
|
UpdateGridFromArray;
|
||||||
db.SaveRecordArray<TOBSNotify>('listNotify', listNotify);
|
db.SaveRecordArray<TOBSNotify>('listNotify', listNotify);
|
||||||
end;
|
end;
|
||||||
@@ -654,12 +690,36 @@ end;
|
|||||||
|
|
||||||
procedure TfrOBS.EdtNotify(newRecord: TOBSNotify; oldPort: integer);
|
procedure TfrOBS.EdtNotify(newRecord: TOBSNotify; oldPort: integer);
|
||||||
var
|
var
|
||||||
i: integer;
|
i,mi: integer; ws:TEventWebServers;
|
||||||
begin
|
begin
|
||||||
|
for I := 0 to EventWebServers.Count - 1 do
|
||||||
|
if EventWebServers[i].port = oldPort then
|
||||||
|
begin
|
||||||
|
ws:=EventWebServers[i];
|
||||||
|
mi:=i;
|
||||||
|
end;
|
||||||
|
|
||||||
for i := 0 to High(listNotify) do
|
for i := 0 to High(listNotify) do
|
||||||
if listNotify[i].port = oldPort then
|
if listNotify[i].port = oldPort then
|
||||||
begin
|
begin
|
||||||
listNotify[i] := newRecord;
|
listNotify[i] := newRecord;
|
||||||
|
ws.port:=listNotify[i].port;
|
||||||
|
ws.typeEvent:=listNotify[i].TypeEvent;
|
||||||
|
ws.se.title:=listNotify[i].HeaderText;
|
||||||
|
ws.se.Context:=listNotify[i].MessText;
|
||||||
|
ws.se.Url:=listNotify[i].Picture;
|
||||||
|
ws.se.SoundURL:=listNotify[i].Sound;
|
||||||
|
ws.se.TimeMsg:=listNotify[i].TimeMess;
|
||||||
|
ws.se.FontTitle.Font:=listNotify[i].HeaderStyleFont;
|
||||||
|
ws.se.FontTitle.Font := listNotify[i].HeaderStyleFont;
|
||||||
|
ws.se.FontTitle.Size := listNotify[i].HeaderSizeFont;
|
||||||
|
ws.se.FontTitle.Color := listNotify[i].HeaderColorFont;
|
||||||
|
ws.se.FontContext.Font := listNotify[i].MessStyleFont;
|
||||||
|
ws.se.FontContext.Size := listNotify[i].MessSizeFont;
|
||||||
|
ws.se.FontContext.Color := listNotify[i].MessColorFont;
|
||||||
|
ws.se.BorderColor :=listNotify[i].ColorBorder;
|
||||||
|
ws.se.BorderSize := listNotify[i].SolidBorder;
|
||||||
|
ws.se.BlockColor := listNotify[i].ColorBlock;
|
||||||
UpdateGridFromArray;
|
UpdateGridFromArray;
|
||||||
db.SaveRecordArray<TOBSNotify>('listNotify', listNotify);
|
db.SaveRecordArray<TOBSNotify>('listNotify', listNotify);
|
||||||
Break;
|
Break;
|
||||||
@@ -716,342 +776,105 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrOBS.toEventWebServer(CustomReward: TFollowEvent);
|
{
|
||||||
|
0 Îòñëåæèâàíèå
|
||||||
|
1 Ïîäïèñêà
|
||||||
|
2 Ïîäàðî÷íàÿ ïîäïèñêà
|
||||||
|
3 Ðåéä
|
||||||
|
4 Äîíàò
|
||||||
|
5 Ñâîå
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
procedure TfrOBS.toEventWebServer(aEvent: TFollowEvent);
|
||||||
var
|
var
|
||||||
se: TStyleEvent;
|
i: integer;
|
||||||
i, j: integer;
|
ws: TEventWebServers;
|
||||||
f: TfrColorSettings;
|
|
||||||
t: TfrFontSettings;
|
|
||||||
notify: TOBSNotify;
|
|
||||||
begin
|
begin
|
||||||
f := TfrColorSettings.Create(self);
|
TTW_Bot.toLog('fOBS', 'toEventWebServer', 'Ïîëó÷åíî ñîáûòèå Follow', 0);
|
||||||
t := TfrFontSettings.Create(self);
|
for i := 0 to EventWebServers.Count - 1 do
|
||||||
try
|
|
||||||
for i := 0 to high(listNotify) do
|
|
||||||
begin
|
begin
|
||||||
if listNotify[i].TypeEvent = 0 then
|
if EventWebServers[i].typeEvent = 0 then
|
||||||
begin
|
begin
|
||||||
notify := listNotify[i];
|
ws := EventWebServers[i];
|
||||||
se.Title := notify.HeaderText;
|
ws.se.Title := StringReplace(ws.se.Title, '[NICK]',
|
||||||
se.Title := StringReplace(se.Title, '[NICK]',
|
aEvent.event.user_name, [rfReplaceAll]);
|
||||||
CustomReward.event.user_name, [rfReplaceAll]);
|
ws.se.Timestamp:=now;
|
||||||
se.Context := notify.MessText;
|
ws.se.RequireInteraction := True;
|
||||||
se.Url := notify.Picture;
|
TTW_Bot.toLog('fOBS', 'toEventWebServer.BlockColor', ws.se.BlockColor, 3);
|
||||||
se.SoundURL := notify.Sound;
|
EventWebServers[i].WebServerChat.AddMessage(ws.se);
|
||||||
se.Timestamp := Now;
|
|
||||||
se.TimeMsg := notify.TimeMess;
|
|
||||||
se.BorderColor := f.ccbStyleBorderColor.Items[notify.ColorBorder];
|
|
||||||
se.BorderSize := notify.SolidBorder;
|
|
||||||
se.BlockColor := notify.ColorBlock;
|
|
||||||
se.FontTitle.Font := t.cbFontStyleDefault.Items[notify.HeaderStyleFont];
|
|
||||||
se.FontTitle.Size := notify.HeaderSizeFont;
|
|
||||||
se.FontTitle.Color := t.ccbFontColor.Items[notify.HeaderColorFont];
|
|
||||||
se.FontContext.Font := t.cbFontStyleDefault.Items[notify.MessSizeFont];
|
|
||||||
se.FontContext.Size := notify.MessSizeFont;
|
|
||||||
se.FontContext.Color := t.ccbFontColor.Items[notify.MessColorFont];
|
|
||||||
se.RequireInteraction := True;
|
|
||||||
for j := 0 to EventWebServers.Count - 1 do
|
|
||||||
begin
|
|
||||||
EventWebServers[j].WebServerChat.AddMessage(se);
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end;
|
|
||||||
|
|
||||||
finally
|
|
||||||
f.Free;
|
|
||||||
t.Free;
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrOBS.toEventWebServer(CustomReward: TSubEvent);
|
procedure TfrOBS.toEventWebServer(aEvent: TSubEvent);
|
||||||
var
|
var
|
||||||
se: TStyleEvent;
|
i: integer;
|
||||||
i, j: integer;
|
ws: TEventWebServers;
|
||||||
f: TfrColorSettings;
|
|
||||||
t: TfrFontSettings;
|
|
||||||
notify: TOBSNotify;
|
|
||||||
begin
|
begin
|
||||||
f := TfrColorSettings.Create(self);
|
for i := 0 to EventWebServers.Count - 1 do
|
||||||
t := TfrFontSettings.Create(self);
|
|
||||||
try
|
|
||||||
for i := 0 to high(listNotify) do
|
|
||||||
begin
|
begin
|
||||||
if listNotify[i].TypeEvent = 1 then
|
if EventWebServers[i].typeEvent <> 1 then
|
||||||
begin
|
Continue;
|
||||||
notify := listNotify[i];
|
ws := EventWebServers[i];
|
||||||
se.Title := notify.HeaderText;
|
ws.se.Title := StringReplace(ws.se.Title, '[NICK]', aEvent.event.user_name,
|
||||||
se.Title := StringReplace(se.Title, '[NICK]',
|
[rfReplaceAll]);
|
||||||
CustomReward.event.user_name, [rfReplaceAll]);
|
EventWebServers[i] := ws;
|
||||||
se.Context := notify.MessText;
|
EventWebServers[i].WebServerChat.AddMessage(EventWebServers[i].se);
|
||||||
|
|
||||||
se.Url := notify.Picture;
|
|
||||||
se.SoundURL := notify.Sound;
|
|
||||||
se.Timestamp := Now;
|
|
||||||
se.TimeMsg := notify.TimeMess;
|
|
||||||
se.BorderColor := f.ccbStyleBorderColor.Items[notify.ColorBorder];
|
|
||||||
se.BorderSize := notify.SolidBorder;
|
|
||||||
se.BlockColor := notify.ColorBlock;
|
|
||||||
se.FontTitle.Font := t.cbFontStyleDefault.Items[notify.HeaderStyleFont];
|
|
||||||
se.FontTitle.Size := notify.HeaderSizeFont;
|
|
||||||
se.FontTitle.Color := t.ccbFontColor.Items[notify.HeaderColorFont];
|
|
||||||
se.FontContext.Font := t.cbFontStyleDefault.Items[notify.MessSizeFont];
|
|
||||||
se.FontContext.Size := notify.MessSizeFont;
|
|
||||||
se.FontContext.Color := t.ccbFontColor.Items[notify.MessColorFont];
|
|
||||||
se.RequireInteraction := True;
|
|
||||||
for j := 0 to EventWebServers.Count - 1 do
|
|
||||||
begin
|
|
||||||
EventWebServers[j].WebServerChat.AddMessage(se);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
end;
|
|
||||||
|
|
||||||
finally
|
|
||||||
f.Free;
|
|
||||||
t.Free;
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrOBS.toEventWebServer(CustomReward: TRaidEvent);
|
procedure TfrOBS.toEventWebServer(aEvent: TRaidEvent);
|
||||||
var
|
var
|
||||||
se: TStyleEvent;
|
i: integer;
|
||||||
i, j: integer;
|
ws: TEventWebServers;
|
||||||
f: TfrColorSettings;
|
|
||||||
t: TfrFontSettings;
|
|
||||||
notify: TOBSNotify;
|
|
||||||
begin
|
begin
|
||||||
f := TfrColorSettings.Create(self);
|
for i := 0 to EventWebServers.Count - 1 do
|
||||||
t := TfrFontSettings.Create(self);
|
|
||||||
try
|
|
||||||
for i := 0 to high(listNotify) do
|
|
||||||
begin
|
begin
|
||||||
if listNotify[i].TypeEvent = 3 then
|
if EventWebServers[i].typeEvent <> 3 then
|
||||||
begin
|
Continue;
|
||||||
notify := listNotify[i];
|
ws := EventWebServers[i];
|
||||||
se.Title := notify.HeaderText;
|
ws.se.Title := StringReplace(ws.se.Title, '[NICK]',
|
||||||
se.Title := StringReplace(se.Title, '[NICK]',
|
aEvent.event.from_broadcaster_user_name, [rfReplaceAll]);
|
||||||
CustomReward.event.from_broadcaster_user_name, [rfReplaceAll]);
|
ws.se.Context := StringReplace(ws.se.Context, '[SUM]',
|
||||||
se.Context := notify.MessText;
|
inttostr(aEvent.event.viewers), [rfReplaceAll]);
|
||||||
se.Context := StringReplace(se.Context, '[SUM]',
|
EventWebServers[i] := ws;
|
||||||
inttostr(CustomReward.event.viewers), [rfReplaceAll]);
|
EventWebServers[i].WebServerChat.AddMessage(EventWebServers[i].se);
|
||||||
se.Url := notify.Picture;
|
|
||||||
se.SoundURL := notify.Sound;
|
|
||||||
se.Timestamp := Now;
|
|
||||||
se.TimeMsg := notify.TimeMess;
|
|
||||||
se.BorderColor := f.ccbStyleBorderColor.Items[notify.ColorBorder];
|
|
||||||
se.BorderSize := notify.SolidBorder;
|
|
||||||
se.BlockColor := notify.ColorBlock;
|
|
||||||
se.FontTitle.Font := t.cbFontStyleDefault.Items[notify.HeaderStyleFont];
|
|
||||||
se.FontTitle.Size := notify.HeaderSizeFont;
|
|
||||||
se.FontTitle.Color := t.ccbFontColor.Items[notify.HeaderColorFont];
|
|
||||||
se.FontContext.Font := t.cbFontStyleDefault.Items[notify.MessSizeFont];
|
|
||||||
se.FontContext.Size := notify.MessSizeFont;
|
|
||||||
se.FontContext.Color := t.ccbFontColor.Items[notify.MessColorFont];
|
|
||||||
se.RequireInteraction := True;
|
|
||||||
for j := 0 to EventWebServers.Count - 1 do
|
|
||||||
begin
|
|
||||||
EventWebServers[j].WebServerChat.AddMessage(se);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
end;
|
|
||||||
|
|
||||||
finally
|
|
||||||
f.Free;
|
|
||||||
t.Free;
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrOBS.toEventWebServer(CustomReward: TGiftEvent);
|
procedure TfrOBS.toEventWebServer(aEvent: TGiftEvent);
|
||||||
var
|
var
|
||||||
se: TStyleEvent;
|
i: integer;
|
||||||
i, j: integer;
|
ws: TEventWebServers;
|
||||||
f: TfrColorSettings;
|
|
||||||
t: TfrFontSettings;
|
|
||||||
notify: TOBSNotify;
|
|
||||||
begin
|
begin
|
||||||
f := TfrColorSettings.Create(self);
|
for i := 0 to EventWebServers.Count - 1 do
|
||||||
t := TfrFontSettings.Create(self);
|
|
||||||
try
|
|
||||||
for i := 0 to high(listNotify) do
|
|
||||||
begin
|
begin
|
||||||
if listNotify[i].TypeEvent = 2 then
|
if EventWebServers[i].typeEvent <> 2 then
|
||||||
begin
|
Continue;
|
||||||
notify := listNotify[i];
|
ws := EventWebServers[i];
|
||||||
se.Title := notify.HeaderText;
|
ws.se.Title := StringReplace(ws.se.Title, '[NICK]', aEvent.event.user_name,
|
||||||
se.Title := StringReplace(se.Title, '[NICK]',
|
[rfReplaceAll]);
|
||||||
CustomReward.event.user_name, [rfReplaceAll]);
|
EventWebServers[i] := ws;
|
||||||
se.Context := notify.MessText;
|
EventWebServers[i].WebServerChat.AddMessage(EventWebServers[i].se);
|
||||||
se.Url := notify.Picture;
|
|
||||||
se.SoundURL := notify.Sound;
|
|
||||||
se.Timestamp := Now;
|
|
||||||
se.TimeMsg := notify.TimeMess;
|
|
||||||
se.BorderColor := f.ccbStyleBorderColor.Items[notify.ColorBorder];
|
|
||||||
se.BorderSize := notify.SolidBorder;
|
|
||||||
se.BlockColor := notify.ColorBlock;
|
|
||||||
se.FontTitle.Font := t.cbFontStyleDefault.Items[notify.HeaderStyleFont];
|
|
||||||
se.FontTitle.Size := notify.HeaderSizeFont;
|
|
||||||
se.FontTitle.Color := t.ccbFontColor.Items[notify.HeaderColorFont];
|
|
||||||
se.FontContext.Font := t.cbFontStyleDefault.Items[notify.MessSizeFont];
|
|
||||||
se.FontContext.Size := notify.MessSizeFont;
|
|
||||||
se.FontContext.Color := t.ccbFontColor.Items[notify.MessColorFont];
|
|
||||||
se.RequireInteraction := True;
|
|
||||||
for j := 0 to EventWebServers.Count - 1 do
|
|
||||||
begin
|
|
||||||
EventWebServers[j].WebServerChat.AddMessage(se);
|
|
||||||
end;
|
end;
|
||||||
end;
|
|
||||||
|
|
||||||
end;
|
|
||||||
|
|
||||||
finally
|
|
||||||
f.Free;
|
|
||||||
t.Free;
|
|
||||||
end;
|
|
||||||
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrOBS.toEventWebServer(aNick, aSum, aText: string);
|
procedure TfrOBS.toEventWebServer(aNick, aSum, aText: string);
|
||||||
var
|
var
|
||||||
i, j: integer;
|
i: integer;
|
||||||
aSumInt: integer;
|
ws: TEventWebServers;
|
||||||
BestRow: integer;
|
|
||||||
BestPriority: integer;
|
|
||||||
BestValue: integer;
|
|
||||||
Condition: string;
|
|
||||||
CurrentPriority: integer;
|
|
||||||
CurrentValue: integer;
|
|
||||||
MinVal, MaxVal: integer;
|
|
||||||
Parts: tstringlist;
|
|
||||||
se: TStyleEvent;
|
|
||||||
notify: TOBSNotify;
|
|
||||||
f: TfrColorSettings;
|
|
||||||
t: TfrFontSettings;
|
|
||||||
begin
|
begin
|
||||||
aSumInt := StrToIntDef(aSum, 0);
|
for i := 0 to EventWebServers.Count - 1 do
|
||||||
BestRow := -1;
|
|
||||||
BestPriority := -1;
|
|
||||||
BestValue := 0;
|
|
||||||
|
|
||||||
for i := 0 to high(listNotify) do
|
|
||||||
begin
|
begin
|
||||||
if listNotify[i].TypeEvent = 4 then
|
if EventWebServers[i].typeEvent <> 4 then
|
||||||
begin
|
|
||||||
Condition := Trim(listNotify[i].TypeEdit);
|
|
||||||
|
|
||||||
if Condition = '' then
|
|
||||||
Continue;
|
Continue;
|
||||||
|
ws := EventWebServers[i];
|
||||||
CurrentPriority := -1;
|
ws.se.Title := StringReplace(ws.se.Title, '[NICK]', aNick, [rfReplaceAll]);
|
||||||
CurrentValue := 0;
|
ws.se.Context := StringReplace(ws.se.Context, '[SUM]', aSum,
|
||||||
|
[rfReplaceAll]);
|
||||||
// Ïðîâåðêà íà òî÷íîå çíà÷åíèå
|
EventWebServers[i] := ws;
|
||||||
if Pos('-', Condition) = 0 then
|
EventWebServers[i].WebServerChat.AddMessage(EventWebServers[i].se);
|
||||||
begin
|
|
||||||
if Pos('>', Condition) = 0 then
|
|
||||||
begin
|
|
||||||
if Pos('<', Condition) = 0 then
|
|
||||||
begin
|
|
||||||
// Òî÷íîå çíà÷åíèå
|
|
||||||
CurrentValue := StrToIntDef(Condition, -1);
|
|
||||||
if aSumInt = CurrentValue then
|
|
||||||
CurrentPriority := 4;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
if CurrentPriority = -1 then
|
|
||||||
begin
|
|
||||||
if Pos('-', Condition) > 0 then
|
|
||||||
begin
|
|
||||||
// Äèàïàçîí
|
|
||||||
Parts := tstringlist.Create;
|
|
||||||
try
|
|
||||||
Parts.Delimiter := '-';
|
|
||||||
Parts.StrictDelimiter := True;
|
|
||||||
Parts.DelimitedText := Condition;
|
|
||||||
if Parts.Count = 2 then
|
|
||||||
begin
|
|
||||||
MinVal := StrToIntDef(Trim(Parts[0]), 0);
|
|
||||||
MaxVal := StrToIntDef(Trim(Parts[1]), 0);
|
|
||||||
if (aSumInt >= MinVal) and (aSumInt <= MaxVal) then
|
|
||||||
begin
|
|
||||||
CurrentPriority := 3;
|
|
||||||
CurrentValue := MinVal; // Ïðèîðèòåò ïî MinVal
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
finally
|
|
||||||
Parts.Free;
|
|
||||||
end;
|
|
||||||
end
|
|
||||||
else if Pos('>', Condition) > 0 then
|
|
||||||
begin
|
|
||||||
// Óñëîâèå ">X"
|
|
||||||
CurrentValue :=
|
|
||||||
StrToIntDef(Trim(StringReplace(Condition, '>', '',
|
|
||||||
[rfReplaceAll])), 0);
|
|
||||||
if aSumInt >= CurrentValue then
|
|
||||||
CurrentPriority := 2;
|
|
||||||
end
|
|
||||||
else if Pos('<', Condition) > 0 then
|
|
||||||
begin
|
|
||||||
// Óñëîâèå "<X"
|
|
||||||
CurrentValue :=
|
|
||||||
StrToIntDef(Trim(StringReplace(Condition, '<', '',
|
|
||||||
[rfReplaceAll])), 0);
|
|
||||||
if aSumInt <= CurrentValue then
|
|
||||||
CurrentPriority := 1;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
if CurrentPriority <> -1 then
|
|
||||||
begin
|
|
||||||
// Îïðåäåëåíèå íàèëó÷øåãî óñëîâèÿ
|
|
||||||
if (CurrentPriority > BestPriority) or (CurrentPriority = BestPriority)
|
|
||||||
and ((CurrentPriority = 3) and (CurrentValue > BestValue) or
|
|
||||||
(CurrentPriority = 2) and (CurrentValue > BestValue) or
|
|
||||||
(CurrentPriority = 1) and (CurrentValue < BestValue)) then
|
|
||||||
begin
|
|
||||||
BestPriority := CurrentPriority;
|
|
||||||
BestValue := CurrentValue;
|
|
||||||
BestRow := i;
|
|
||||||
notify := listNotify[i];
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
if BestRow = -1 then
|
|
||||||
Break;
|
|
||||||
|
|
||||||
f := TfrColorSettings.Create(self);
|
|
||||||
t := TfrFontSettings.Create(self);
|
|
||||||
try
|
|
||||||
se.Title := notify.HeaderText;
|
|
||||||
se.Title := StringReplace(se.Title, '[NICK]', aNick, [rfReplaceAll]);
|
|
||||||
se.Title := StringReplace(se.Title, '[SUM]', aSum, [rfReplaceAll]);
|
|
||||||
se.Context := aText;
|
|
||||||
se.Url := notify.Picture;
|
|
||||||
se.SoundURL := notify.Sound;
|
|
||||||
se.Timestamp := Now;
|
|
||||||
se.TimeMsg := notify.TimeMess;
|
|
||||||
se.BorderColor := f.ccbStyleBorderColor.Items[notify.ColorBorder];
|
|
||||||
se.BorderSize := notify.SolidBorder;
|
|
||||||
se.BlockColor := notify.ColorBlock;
|
|
||||||
se.FontTitle.Font := t.cbFontStyleDefault.Items[notify.HeaderStyleFont];
|
|
||||||
se.FontTitle.Size := notify.HeaderSizeFont;
|
|
||||||
se.FontTitle.Color := t.ccbFontColor.Items[notify.HeaderColorFont];
|
|
||||||
se.FontContext.Font := t.cbFontStyleDefault.Items[notify.MessSizeFont];
|
|
||||||
se.FontContext.Size := notify.MessSizeFont;
|
|
||||||
se.FontContext.Color := t.ccbFontColor.Items[notify.MessColorFont];
|
|
||||||
se.RequireInteraction := True;
|
|
||||||
finally
|
|
||||||
f.Free;
|
|
||||||
t.Free;
|
|
||||||
end;
|
|
||||||
for j := 0 to EventWebServers.Count - 1 do
|
|
||||||
begin
|
|
||||||
EventWebServers[j].WebServerChat.AddMessage(se);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end;
|
end;
|
||||||
|
|||||||
@@ -0,0 +1,109 @@
|
|||||||
|
object frRevards: TfrRevards
|
||||||
|
Size.Width = 613.000000000000000000
|
||||||
|
Size.Height = 339.000000000000000000
|
||||||
|
Size.PlatformDefault = False
|
||||||
|
object Label1: TLabel
|
||||||
|
Position.X = 8.000000000000000000
|
||||||
|
Position.Y = 118.000000000000000000
|
||||||
|
Text = #1053#1072#1075#1088#1072#1076#1099' '#1073#1086#1090#1072
|
||||||
|
TabOrder = 0
|
||||||
|
end
|
||||||
|
object StringGrid1: TStringGrid
|
||||||
|
Align = Bottom
|
||||||
|
CanFocus = True
|
||||||
|
ClipChildren = True
|
||||||
|
Position.Y = 143.000000000000000000
|
||||||
|
Size.Width = 613.000000000000000000
|
||||||
|
Size.Height = 196.000000000000000000
|
||||||
|
Size.PlatformDefault = False
|
||||||
|
TabOrder = 1
|
||||||
|
Viewport.Width = 613.000000000000000000
|
||||||
|
Viewport.Height = 196.000000000000000000
|
||||||
|
object StringColumn1: TStringColumn
|
||||||
|
Header = #1053#1072#1079#1074#1072#1085#1080#1077
|
||||||
|
HeaderSettings.TextSettings.WordWrap = False
|
||||||
|
Size.Width = 241.000000000000000000
|
||||||
|
end
|
||||||
|
object StringColumn2: TStringColumn
|
||||||
|
Header = #1055#1086#1083#1100#1079#1086#1074#1072#1090#1077#1083#1100#1089#1082#1080#1081' '#1074#1074#1086#1076
|
||||||
|
HeaderSettings.TextSettings.WordWrap = False
|
||||||
|
Size.Width = 140.000000000000000000
|
||||||
|
end
|
||||||
|
object StringColumn3: TStringColumn
|
||||||
|
Header = #1054#1087#1080#1089#1072#1085#1080#1077
|
||||||
|
HeaderSettings.TextSettings.WordWrap = False
|
||||||
|
end
|
||||||
|
object StringColumn4: TStringColumn
|
||||||
|
Header = #1062#1077#1085#1072
|
||||||
|
HeaderSettings.TextSettings.WordWrap = False
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object Label34: TLabel
|
||||||
|
Position.X = 8.000000000000000000
|
||||||
|
Position.Y = 8.000000000000000000
|
||||||
|
TextSettings.Trimming = None
|
||||||
|
Text = #1053#1072#1079#1074#1072#1085#1080#1077
|
||||||
|
TabOrder = 4
|
||||||
|
end
|
||||||
|
object ceCustomRevardTitle: TComboEdit
|
||||||
|
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||||
|
TabOrder = 5
|
||||||
|
ItemHeight = 19.000000000000000000
|
||||||
|
ItemIndex = -1
|
||||||
|
Position.X = 8.000000000000000000
|
||||||
|
Position.Y = 33.000000000000000000
|
||||||
|
Size.Width = 182.000000000000000000
|
||||||
|
Size.Height = 22.000000000000000000
|
||||||
|
Size.PlatformDefault = False
|
||||||
|
end
|
||||||
|
object edtCustomRevardPrompt: TEdit
|
||||||
|
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||||
|
TabOrder = 9
|
||||||
|
Position.X = 198.000000000000000000
|
||||||
|
Position.Y = 33.000000000000000000
|
||||||
|
Size.Width = 348.000000000000000000
|
||||||
|
Size.Height = 22.000000000000000000
|
||||||
|
Size.PlatformDefault = False
|
||||||
|
end
|
||||||
|
object nbCustomRevardCost: TNumberBox
|
||||||
|
Touch.InteractiveGestures = [LongTap, DoubleTap]
|
||||||
|
TabOrder = 7
|
||||||
|
Cursor = crIBeam
|
||||||
|
Max = 1000000.000000000000000000
|
||||||
|
Position.X = 8.000000000000000000
|
||||||
|
Position.Y = 88.000000000000000000
|
||||||
|
Size.Width = 79.000000000000000000
|
||||||
|
Size.Height = 22.000000000000000000
|
||||||
|
Size.PlatformDefault = False
|
||||||
|
end
|
||||||
|
object Label35: TLabel
|
||||||
|
Position.X = 8.000000000000000000
|
||||||
|
Position.Y = 63.000000000000000000
|
||||||
|
Size.Width = 57.000000000000000000
|
||||||
|
Size.Height = 17.000000000000000000
|
||||||
|
Size.PlatformDefault = False
|
||||||
|
TextSettings.Trimming = None
|
||||||
|
Text = #1062#1077#1085#1072
|
||||||
|
TabOrder = 6
|
||||||
|
end
|
||||||
|
object Label2: TLabel
|
||||||
|
Position.X = 198.000000000000000000
|
||||||
|
Position.Y = 8.000000000000000000
|
||||||
|
Text = #1054#1087#1080#1089#1072#1085#1080#1077
|
||||||
|
TabOrder = 10
|
||||||
|
end
|
||||||
|
object btnAddCustomRewards: TButton
|
||||||
|
Position.X = 95.000000000000000000
|
||||||
|
Position.Y = 88.000000000000000000
|
||||||
|
TabOrder = 16
|
||||||
|
Text = #1044#1086#1073#1072#1074#1080#1090#1100
|
||||||
|
TextSettings.Trimming = None
|
||||||
|
end
|
||||||
|
object btnDelCustomRewards: TButton
|
||||||
|
Position.X = 183.000000000000000000
|
||||||
|
Position.Y = 88.000000000000000000
|
||||||
|
TabOrder = 17
|
||||||
|
Text = #1059#1076#1072#1083#1080#1090#1100
|
||||||
|
TextSettings.Trimming = None
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
unit fRevards;
|
||||||
|
|
||||||
|
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, uRecords, System.Generics.Collections,
|
||||||
|
FMX.Controls.Presentation, FMX.EditBox, FMX.NumberBox, FMX.Edit, FMX.ComboEdit;
|
||||||
|
|
||||||
|
type
|
||||||
|
TfrRevards = class(TFrame)
|
||||||
|
Label1: TLabel;
|
||||||
|
StringGrid1: TStringGrid;
|
||||||
|
StringColumn1: TStringColumn;
|
||||||
|
StringColumn2: TStringColumn;
|
||||||
|
StringColumn3: TStringColumn;
|
||||||
|
StringColumn4: TStringColumn;
|
||||||
|
Label34: TLabel;
|
||||||
|
ceCustomRevardTitle: TComboEdit;
|
||||||
|
edtCustomRevardPrompt: TEdit;
|
||||||
|
nbCustomRevardCost: TNumberBox;
|
||||||
|
Label35: TLabel;
|
||||||
|
Label2: TLabel;
|
||||||
|
btnDelCustomRewards: TButton;
|
||||||
|
btnAddCustomRewards: TButton;
|
||||||
|
private
|
||||||
|
{ Private declarations }
|
||||||
|
public
|
||||||
|
{ Public declarations }
|
||||||
|
|
||||||
|
CustomRewards: TList<TCustomRevards>;
|
||||||
|
listRevards:tarray<TReward>;
|
||||||
|
procedure LoadCustomRevards;
|
||||||
|
procedure UpdateGrid;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{$R *.fmx}
|
||||||
|
|
||||||
|
uses ugeneral;
|
||||||
|
|
||||||
|
procedure TfrRevards.LoadCustomRevards;
|
||||||
|
var
|
||||||
|
cr: TCustomRevards;
|
||||||
|
begin
|
||||||
|
CustomRewards.Clear;
|
||||||
|
TTW_Bot.frEvents1.cbRevards.Items.Clear;
|
||||||
|
ceCustomRevardTitle.items.Clear;
|
||||||
|
TTW_Bot.toLog('fRevards', 'LoadCustomRevards', 'Çàïðîñ íàãðàä ñ ñåðâåðà', 3);
|
||||||
|
ttw_API.getCustomReward(CustomRewards);
|
||||||
|
|
||||||
|
for cr in CustomRewards do
|
||||||
|
begin
|
||||||
|
TTW_Bot.frEvents1.cbRevards.Items.Add(cr.Title);
|
||||||
|
ceCustomRevardTitle.Items.Add(cr.Title);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TfrRevards.UpdateGrid;
|
||||||
|
begin
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
+52
-53
@@ -3,29 +3,11 @@ unit uRecords;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
type
|
type
|
||||||
TEventGlobal = record
|
TEventGlobal = record
|
||||||
Event:integer;
|
Event: integer;
|
||||||
Condition:string;
|
Condition: string;
|
||||||
Action:integer;
|
Action: integer;
|
||||||
Param:string;
|
Param: string;
|
||||||
end;
|
|
||||||
|
|
||||||
|
|
||||||
type
|
|
||||||
TRLog = record
|
|
||||||
rTime: ttime;
|
|
||||||
rType: string;
|
|
||||||
rModule: string;
|
|
||||||
rMethod: string;
|
|
||||||
rMessage: string;
|
|
||||||
end;
|
|
||||||
|
|
||||||
type
|
|
||||||
TCounter = record
|
|
||||||
counterName: string;
|
|
||||||
trigger: string;
|
|
||||||
count: integer;
|
|
||||||
auto: integer;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
type
|
type
|
||||||
@@ -33,19 +15,6 @@ type
|
|||||||
regexp: string;
|
regexp: string;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
type
|
|
||||||
TListTimer = record
|
|
||||||
Enable: integer;
|
|
||||||
interval: integer;
|
|
||||||
o: integer;
|
|
||||||
mess: string;
|
|
||||||
end;
|
|
||||||
|
|
||||||
type
|
|
||||||
TOBSKandinsky = record
|
|
||||||
port: integer;
|
|
||||||
end;
|
|
||||||
|
|
||||||
type
|
type
|
||||||
TOBSNotify = record
|
TOBSNotify = record
|
||||||
Picture: string;
|
Picture: string;
|
||||||
@@ -54,18 +23,18 @@ type
|
|||||||
ColorBlock: string;
|
ColorBlock: string;
|
||||||
SolidBorder: integer;
|
SolidBorder: integer;
|
||||||
Paddings: integer;
|
Paddings: integer;
|
||||||
ColorBorder: integer;
|
ColorBorder: string;
|
||||||
ColorBackground: integer;
|
ColorBackground: string;
|
||||||
|
|
||||||
HeaderText: string;
|
HeaderText: string;
|
||||||
HeaderColorFont: integer;
|
HeaderColorFont: string;
|
||||||
HeaderSizeFont: integer;
|
HeaderSizeFont: integer;
|
||||||
HeaderStyleFont: integer;
|
HeaderStyleFont: string;
|
||||||
|
|
||||||
MessText: string;
|
MessText: string;
|
||||||
MessColorFont: integer;
|
MessColorFont: string;
|
||||||
MessSizeFont: integer;
|
MessSizeFont: integer;
|
||||||
MessStyleFont: integer;
|
MessStyleFont: string;
|
||||||
|
|
||||||
TimeMess: integer;
|
TimeMess: integer;
|
||||||
TypeEvent: integer;
|
TypeEvent: integer;
|
||||||
@@ -86,10 +55,37 @@ type
|
|||||||
MaxCountMess: integer;
|
MaxCountMess: integer;
|
||||||
TimeMess: integer;
|
TimeMess: integer;
|
||||||
port: integer;
|
port: integer;
|
||||||
freez:integer;
|
freez: integer;
|
||||||
StyleFont: integer;
|
StyleFont: integer;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
type
|
||||||
|
TListCommands = record
|
||||||
|
R1: string;
|
||||||
|
R2: string;
|
||||||
|
end;
|
||||||
|
|
||||||
|
type
|
||||||
|
TCounter = record
|
||||||
|
counterName: string;
|
||||||
|
trigger: string;
|
||||||
|
count: integer;
|
||||||
|
auto: integer;
|
||||||
|
end;
|
||||||
|
|
||||||
|
type
|
||||||
|
TListTimer = record
|
||||||
|
Enable: integer;
|
||||||
|
interval: integer;
|
||||||
|
o: integer;
|
||||||
|
mess: string;
|
||||||
|
end;
|
||||||
|
|
||||||
|
type
|
||||||
|
TOBSKandinsky = record
|
||||||
|
port: integer;
|
||||||
|
end;
|
||||||
|
|
||||||
type
|
type
|
||||||
TRandomCounters = record
|
TRandomCounters = record
|
||||||
rndName: string;
|
rndName: string;
|
||||||
@@ -98,9 +94,12 @@ type
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
type
|
type
|
||||||
TListCommands = record
|
TRLog = record
|
||||||
R1: string;
|
rTime: ttime;
|
||||||
R2: string;
|
rType: string;
|
||||||
|
rModule: string;
|
||||||
|
rMethod: string;
|
||||||
|
rMessage: string;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
type
|
type
|
||||||
@@ -270,7 +269,7 @@ type
|
|||||||
format: TArray<string>;
|
format: TArray<string>;
|
||||||
scale: TArray<string>;
|
scale: TArray<string>;
|
||||||
theme_mode: TArray<string>;
|
theme_mode: TArray<string>;
|
||||||
topImage:string;
|
topImage: string;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TStyleChat = record
|
TStyleChat = record
|
||||||
@@ -342,7 +341,7 @@ type
|
|||||||
version: string;
|
version: string;
|
||||||
status: string;
|
status: string;
|
||||||
cost: integer;
|
cost: integer;
|
||||||
condition: TCondition;
|
Condition: TCondition;
|
||||||
transport: TTransport;
|
transport: TTransport;
|
||||||
created_at: string;
|
created_at: string;
|
||||||
end;
|
end;
|
||||||
@@ -383,7 +382,7 @@ type
|
|||||||
|
|
||||||
TCustomRewardEvent = record
|
TCustomRewardEvent = record
|
||||||
subscription: TSubscriptionPoints;
|
subscription: TSubscriptionPoints;
|
||||||
event: TEventReward;
|
Event: TEventReward;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TMetadata = record
|
TMetadata = record
|
||||||
@@ -455,22 +454,22 @@ type
|
|||||||
|
|
||||||
TFollowEvent = record
|
TFollowEvent = record
|
||||||
subscription: TSubscriptionPoints;
|
subscription: TSubscriptionPoints;
|
||||||
event: TEventFollow;
|
Event: TEventFollow;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TSubEvent = record
|
TSubEvent = record
|
||||||
subscription: TSubscriptionPoints;
|
subscription: TSubscriptionPoints;
|
||||||
event: TEventSub;
|
Event: TEventSub;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TGiftEvent = record
|
TGiftEvent = record
|
||||||
subscription: TSubscriptionPoints;
|
subscription: TSubscriptionPoints;
|
||||||
event: TEventGift;
|
Event: TEventGift;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TRaidEvent = record
|
TRaidEvent = record
|
||||||
subscription: TSubscriptionPoints;
|
subscription: TSubscriptionPoints;
|
||||||
event: TEventRaid;
|
Event: TEventRaid;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TBotAppCfg = record
|
TBotAppCfg = record
|
||||||
|
|||||||
+59
-115
@@ -17,13 +17,14 @@ type
|
|||||||
FCriticalSection: TCriticalSection;
|
FCriticalSection: TCriticalSection;
|
||||||
procedure IdHTTPServer1CommandGet(AContext: TIdContext;
|
procedure IdHTTPServer1CommandGet(AContext: TIdContext;
|
||||||
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
|
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
|
||||||
procedure ProcessFileRequest(ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo; const Folder: string);
|
procedure ProcessFileRequest(ARequestInfo: TIdHTTPRequestInfo;
|
||||||
|
AResponseInfo: TIdHTTPResponseInfo; const Folder: string);
|
||||||
function GenerateHTML: string;
|
function GenerateHTML: string;
|
||||||
function GenerateJSON: string;
|
function GenerateJSON: string;
|
||||||
procedure CleanupOldMessages;
|
procedure CleanupOldMessages;
|
||||||
public
|
public
|
||||||
IdHTTPServer1: TIdHTTPServer;
|
IdHTTPServer1: TIdHTTPServer;
|
||||||
constructor Create(FontList: TStrings; aPort:integer);
|
constructor Create(FontList: TStrings; aPort: integer);
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
procedure addMessage(newMsg: TStyleEvent);
|
procedure addMessage(newMsg: TStyleEvent);
|
||||||
procedure ActiveServer(aEn: boolean);
|
procedure ActiveServer(aEn: boolean);
|
||||||
@@ -35,9 +36,9 @@ uses ugeneral;
|
|||||||
|
|
||||||
{ TTTW_Events }
|
{ TTTW_Events }
|
||||||
|
|
||||||
constructor TTTW_Events.Create(FontList: TStrings; aPort:integer);
|
constructor TTTW_Events.Create(FontList: TStrings; aPort: integer);
|
||||||
var
|
var
|
||||||
I: Integer;
|
I: integer;
|
||||||
begin
|
begin
|
||||||
FCriticalSection := TCriticalSection.Create;
|
FCriticalSection := TCriticalSection.Create;
|
||||||
FMessages := TList<TStyleEvent>.Create;
|
FMessages := TList<TStyleEvent>.Create;
|
||||||
@@ -71,27 +72,19 @@ end;
|
|||||||
|
|
||||||
procedure TTTW_Events.CleanupOldMessages;
|
procedure TTTW_Events.CleanupOldMessages;
|
||||||
var
|
var
|
||||||
I: Integer;
|
I: integer;
|
||||||
TimeNow: TDateTime;
|
TimeNow: TDateTime;
|
||||||
begin
|
begin
|
||||||
TimeNow := Now;
|
TimeNow := Now;
|
||||||
FCriticalSection.Enter;
|
|
||||||
try
|
|
||||||
for I := FMessages.Count - 1 downto 0 do
|
for I := FMessages.Count - 1 downto 0 do
|
||||||
begin
|
if SecondsBetween(TimeNow, FMessages[I].Timestamp) >= FMessages[I].TimeMsg
|
||||||
if SecondsBetween(TimeNow, FMessages[I].Timestamp) >= FMessages[I].TimeMsg then
|
then
|
||||||
FMessages.Delete(I);
|
FMessages.Delete(I);
|
||||||
end;
|
|
||||||
finally
|
|
||||||
FCriticalSection.Leave;
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function TTTW_Events.GenerateHTML: string;
|
function TTTW_Events.GenerateHTML: string;
|
||||||
var
|
var
|
||||||
I: Integer;
|
I: integer;
|
||||||
s, s1: string;
|
s, s1: string;
|
||||||
begin
|
begin
|
||||||
// Ãåíåðàöèÿ CSS äëÿ øðèôòîâ
|
// Ãåíåðàöèÿ CSS äëÿ øðèôòîâ
|
||||||
@@ -99,126 +92,82 @@ begin
|
|||||||
for I := 41 to fFontsList.Count - 1 do
|
for I := 41 to fFontsList.Count - 1 do
|
||||||
begin
|
begin
|
||||||
s1 := StringReplace(fFontsList[I], '.ttf', '', [rfReplaceAll]);
|
s1 := StringReplace(fFontsList[I], '.ttf', '', [rfReplaceAll]);
|
||||||
s := s + Format('@font-face { font-family: ''%s''; src: url(fonts/%s); }', [s1, fFontsList[I]]) + #13#10;
|
s := s + Format('@font-face { font-family: ''%s''; src: url(fonts/%s); }',
|
||||||
|
[s1, fFontsList[I]]) + #13#10;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Result := '<!DOCTYPE html><html><head>' +
|
Result := '<!DOCTYPE html><html><head>' +
|
||||||
'<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">' +
|
'<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">'
|
||||||
'<meta http-equiv="Pragma" content="no-cache">' +
|
+ '<meta http-equiv="Pragma" content="no-cache">' +
|
||||||
'<meta http-equiv="Expires" content="0">' +
|
'<meta http-equiv="Expires" content="0">' + '<title>Twitch Messages</title>'
|
||||||
'<title>Twitch Messages</title>' +
|
+ '<style>' + s + '.message { ' + ' will-change: transform, opacity;' +
|
||||||
'<style>' + s +
|
// Îïòèìèçàöèÿ àíèìàöèè
|
||||||
'.message { ' +
|
' backface-visibility: hidden;' + ' transform: translateZ(0);' +
|
||||||
' will-change: transform, opacity;' + // Îïòèìèçàöèÿ àíèìàöèè
|
' margin:5px; ' + ' border-radius:5px; ' +
|
||||||
' backface-visibility: hidden;' +
|
' transition: opacity 1s linear; ' + ' max-width: 600px; ' +
|
||||||
' transform: translateZ(0);' +
|
' margin-left: auto; ' + ' margin-right: auto; ' + '}' +
|
||||||
' margin:5px; ' +
|
'.nick { margin: 0; padding: 2px; }' + '.text { margin: 0; padding: 5px; }'
|
||||||
' border-radius:5px; ' +
|
+ '#audio-warning { ' + ' display: none; ' + ' position: fixed; ' +
|
||||||
' transition: opacity 1s linear; ' +
|
' top: 10px; ' + ' right: 10px; ' + ' background: #ffcccc; ' +
|
||||||
' max-width: 600px; ' +
|
' padding: 10px; ' + ' border: 1px solid red; ' + '}' + '</style>' +
|
||||||
' margin-left: auto; ' +
|
'<script>' + 'let lastPlayedTimestamp = 0;' + 'let audioEnabled = false;' +
|
||||||
' margin-right: auto; ' +
|
|
||||||
'}' +
|
|
||||||
'.nick { margin: 0; padding: 2px; }' +
|
|
||||||
'.text { margin: 0; padding: 5px; }' +
|
|
||||||
'#audio-warning { ' +
|
|
||||||
' display: none; ' +
|
|
||||||
' position: fixed; ' +
|
|
||||||
' top: 10px; ' +
|
|
||||||
' right: 10px; ' +
|
|
||||||
' background: #ffcccc; ' +
|
|
||||||
' padding: 10px; ' +
|
|
||||||
' border: 1px solid red; ' +
|
|
||||||
'}' +
|
|
||||||
'</style>' +
|
|
||||||
'<script>' +
|
|
||||||
'let lastPlayedTimestamp = 0;' +
|
|
||||||
'let audioEnabled = false;' +
|
|
||||||
'let pendingMessages = [];' +
|
'let pendingMessages = [];' +
|
||||||
|
|
||||||
'function enableAudio() {' +
|
'function enableAudio() {' + ' audioEnabled = true;' +
|
||||||
' audioEnabled = true;' +
|
|
||||||
' document.getElementById("audio-overlay").style.display = "none";' +
|
' document.getElementById("audio-overlay").style.display = "none";' +
|
||||||
' processPendingMessages();' +
|
' processPendingMessages();' + '}' +
|
||||||
'}' +
|
|
||||||
|
|
||||||
'function processPendingMessages() {' +
|
'function processPendingMessages() {' + ' pendingMessages.forEach(msg => {'
|
||||||
' pendingMessages.forEach(msg => {' +
|
+ ' playNotificationSound(msg);' + ' });' +
|
||||||
' playNotificationSound(msg);' +
|
' pendingMessages = [];' + '}' +
|
||||||
' });' +
|
|
||||||
' pendingMessages = [];' +
|
|
||||||
'}' +
|
|
||||||
|
|
||||||
'function playNotificationSound(msg) {' +
|
'function playNotificationSound(msg) {' + ' if(!msg.sound) return;' +
|
||||||
' if(!msg.sound) return;' +
|
' const audio = new Audio(msg.sound);' + ' audio.play()' +
|
||||||
' const audio = new Audio(msg.sound);' +
|
' .catch(error => console.log("Audio error:", error));' + '}' +
|
||||||
' audio.play()' +
|
|
||||||
' .catch(error => console.log("Audio error:", error));' +
|
|
||||||
'}' +
|
|
||||||
|
|
||||||
'function fetchMessages() {' +
|
'function fetchMessages() {' + ' fetch("/messages")' +
|
||||||
' fetch("/messages")' +
|
' .then(response => response.json())' + ' .then(data => {' +
|
||||||
' .then(response => response.json())' +
|
|
||||||
' .then(data => {' +
|
|
||||||
' const container = document.getElementById("messages");' +
|
' const container = document.getElementById("messages");' +
|
||||||
' container.innerHTML = "";' +
|
' container.innerHTML = "";' + ' data.forEach(msg => {' +
|
||||||
' data.forEach(msg => {' +
|
|
||||||
|
|
||||||
// Ñîõðàíÿåì ñîîáùåíèÿ äî àêòèâàöèè çâóêà
|
// Ñîõðàíÿåì ñîîáùåíèÿ äî àêòèâàöèè çâóêà
|
||||||
' if(msg.sound && msg.timestamp > lastPlayedTimestamp) {' +
|
' if(msg.sound && msg.timestamp > lastPlayedTimestamp) {' +
|
||||||
' playNotificationSound(msg);' +
|
' playNotificationSound(msg);' +
|
||||||
' lastPlayedTimestamp = msg.timestamp;' +
|
' lastPlayedTimestamp = msg.timestamp;' + ' }' +
|
||||||
' }' +
|
|
||||||
|
|
||||||
' const div = document.createElement("div");' +
|
' const div = document.createElement("div");' +
|
||||||
' div.className = "message";' +
|
' div.className = "message";' +
|
||||||
' div.id = "msg-" + msg.timestamp;' +
|
' div.id = "msg-" + msg.timestamp;' + ' div.style = `' +
|
||||||
' div.style = `' +
|
|
||||||
' background-color: ${msg.color};' +
|
' background-color: ${msg.color};' +
|
||||||
' padding: ${msg.padding}px;' +
|
' padding: ${msg.padding}px;' +
|
||||||
' border: ${msg.sizeBorder}px solid ${msg.colorBorder};' +
|
' border: ${msg.sizeBorder}px solid ${msg.colorBorder};' +
|
||||||
' text-align: center;' +
|
' text-align: center;' + ' `;' +
|
||||||
' `;' +
|
|
||||||
|
|
||||||
// Âíóòðåííèé HTML
|
// Âíóòðåííèé HTML
|
||||||
' let content = "";' +
|
' let content = "";' + ' if(msg.url) {' +
|
||||||
' if(msg.url) {' +
|
' content += `<img src="${msg.url}" style="max-width: 100%; height: auto;">`;'
|
||||||
' content += `<img src="${msg.url}" style="max-width: 100%; height: auto;">`;' +
|
+ ' }' + ' content += `' + ' <p class="nick" style="'
|
||||||
' }' +
|
+ ' color: ${msg.titlecolor};' +
|
||||||
' content += `' +
|
|
||||||
' <p class="nick" style="' +
|
|
||||||
' color: ${msg.titlecolor};' +
|
|
||||||
' font-family: ''${msg.titlefamily}'';' +
|
' font-family: ''${msg.titlefamily}'';' +
|
||||||
' font-size: ${msg.titleSize}px;">' +
|
' font-size: ${msg.titleSize}px;">' +
|
||||||
' ${msg.nickname}' +
|
' ${msg.nickname}' + ' </p>' +
|
||||||
' </p>' +
|
|
||||||
' <p class="text" style="' +
|
' <p class="text" style="' +
|
||||||
' color: ${msg.contentcolor};' +
|
' color: ${msg.contentcolor};' +
|
||||||
' font-family: ''${msg.contentfamily}'';' +
|
' font-family: ''${msg.contentfamily}'';' +
|
||||||
' font-size: ${msg.contentSize}px;">' +
|
' font-size: ${msg.contentSize}px;">' +
|
||||||
' ${msg.content}' +
|
' ${msg.content}' + ' </p>' + ' `;' +
|
||||||
' </p>' +
|
|
||||||
' `;' +
|
|
||||||
' div.innerHTML = content;' +
|
' div.innerHTML = content;' +
|
||||||
|
|
||||||
// Àíèìàöèÿ èñ÷åçíîâåíèÿ
|
// Àíèìàöèÿ èñ÷åçíîâåíèÿ
|
||||||
' setTimeout(() => {' +
|
' setTimeout(() => {' + ' div.style.opacity = "0";' +
|
||||||
' div.style.opacity = "0";' +
|
|
||||||
' setTimeout(() => div.remove(), 1000);' +
|
' setTimeout(() => div.remove(), 1000);' +
|
||||||
' }, (msg.duration - 1) * 1000);' +
|
' }, (msg.duration - 1) * 1000);' +
|
||||||
|
|
||||||
' container.appendChild(div);' +
|
' container.appendChild(div);' + ' });' + ' });' + '}' +
|
||||||
' });' +
|
|
||||||
' });' +
|
|
||||||
'}' +
|
|
||||||
|
|
||||||
'setInterval(fetchMessages, 500);' +
|
'setInterval(fetchMessages, 1000);' + 'fetchMessages();' + '</script>' +
|
||||||
'fetchMessages();' +
|
|
||||||
'</script>' +
|
|
||||||
|
|
||||||
'</head>' +
|
'</head>' + '<body>' + ' <div id="messages"></div>' +
|
||||||
'<body>' +
|
|
||||||
' <div id="messages"></div>' +
|
|
||||||
|
|
||||||
'</body></html>';
|
'</body></html>';
|
||||||
end;
|
end;
|
||||||
@@ -226,42 +175,36 @@ end;
|
|||||||
function TTTW_Events.GenerateJSON: string;
|
function TTTW_Events.GenerateJSON: string;
|
||||||
var
|
var
|
||||||
JSONArray: TJSONArray;
|
JSONArray: TJSONArray;
|
||||||
I: Integer; S,S1:STRING;
|
I: Integer;
|
||||||
Msg: TStyleEvent;
|
Msg: TStyleEvent;
|
||||||
begin
|
begin
|
||||||
JSONArray := TJSONArray.Create;
|
JSONArray := TJSONArray.Create;
|
||||||
try
|
try
|
||||||
FCriticalSection.Enter;
|
FCriticalSection.Enter;
|
||||||
try
|
try
|
||||||
CleanupOldMessages;
|
|
||||||
for I := 0 to FMessages.Count - 1 do
|
for I := 0 to FMessages.Count - 1 do
|
||||||
begin
|
begin
|
||||||
Msg := FMessages[I];
|
Msg := FMessages[I];
|
||||||
s:=StringReplace(Msg.FontTitle.Font,'.ttf','',[rfReplaceAll]);
|
|
||||||
s1:=StringReplace(Msg.FontContext.Font,'.ttf','',[rfReplaceAll]);
|
|
||||||
|
|
||||||
JSONArray.AddElement(TJSONObject.Create
|
JSONArray.AddElement(
|
||||||
|
TJSONObject.Create
|
||||||
.AddPair('nickname', Msg.Title)
|
.AddPair('nickname', Msg.Title)
|
||||||
.AddPair('url', Msg.Url)
|
.AddPair('url', Msg.Url)
|
||||||
.AddPair('content', Msg.Context)
|
.AddPair('content', Msg.Context)
|
||||||
.AddPair('timestamp', TJSONNumber.Create(DateTimeToUnix(Msg.Timestamp)))
|
.AddPair('timestamp', TJSONNumber.Create(DateTimeToUnix(Msg.Timestamp)))
|
||||||
.AddPair('sound', Msg.SoundURL)
|
.AddPair('sound', Msg.SoundURL)
|
||||||
.AddPair('duration', Msg.TimeMsg)
|
.AddPair('duration', Msg.TimeMsg)
|
||||||
|
|
||||||
.AddPair('color', Msg.BlockColor)
|
.AddPair('color', Msg.BlockColor)
|
||||||
.AddPair('colorBorder', Msg.BorderColor)
|
.AddPair('colorBorder', Msg.BorderColor)
|
||||||
.AddPair('sizeBorder', TJSONNumber.Create(Msg.BorderSize))
|
.AddPair('sizeBorder', TJSONNumber.Create(Msg.BorderSize))
|
||||||
.AddPair('fontSize', TJSONNumber.Create(Msg.FontTitle.size))
|
.AddPair('fontSize', TJSONNumber.Create(Msg.FontTitle.Size))
|
||||||
|
|
||||||
.AddPair('titlecolor', Msg.FontTitle.Color)
|
.AddPair('titlecolor', Msg.FontTitle.Color)
|
||||||
.AddPair('titlefamily', s)
|
.AddPair('titlefamily', TPath.GetFileNameWithoutExtension(Msg.FontTitle.Font))
|
||||||
.AddPair('titleSize', TJSONNumber.Create(Msg.FontTitle.Size))
|
.AddPair('titleSize', TJSONNumber.Create(Msg.FontTitle.Size))
|
||||||
.AddPair('contentcolor', Msg.FontContext.Color)
|
.AddPair('contentcolor', Msg.FontContext.Color)
|
||||||
.AddPair('contentfamily', s1)
|
.AddPair('contentfamily', TPath.GetFileNameWithoutExtension(Msg.FontContext.Font))
|
||||||
.AddPair('contentSize', TJSONNumber.Create(Msg.FontContext.Size))
|
.AddPair('contentSize', TJSONNumber.Create(Msg.FontContext.Size))
|
||||||
|
);
|
||||||
|
|
||||||
); // Ôèêñèðîâàííûé ðàçìåð òåêñòà
|
|
||||||
end;
|
end;
|
||||||
finally
|
finally
|
||||||
FCriticalSection.Leave;
|
FCriticalSection.Leave;
|
||||||
@@ -271,10 +214,10 @@ begin
|
|||||||
finally
|
finally
|
||||||
JSONArray.Free;
|
JSONArray.Free;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTTW_Events.ProcessFileRequest(ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo; const Folder: string);
|
procedure TTTW_Events.ProcessFileRequest(ARequestInfo: TIdHTTPRequestInfo;
|
||||||
|
AResponseInfo: TIdHTTPResponseInfo; const Folder: string);
|
||||||
var
|
var
|
||||||
FileName: string;
|
FileName: string;
|
||||||
FilePath: string;
|
FilePath: string;
|
||||||
@@ -290,6 +233,7 @@ begin
|
|||||||
AResponseInfo.ContentStream := FS;
|
AResponseInfo.ContentStream := FS;
|
||||||
AResponseInfo.ContentType := GetMIMETypeFromFile(FilePath);;
|
AResponseInfo.ContentType := GetMIMETypeFromFile(FilePath);;
|
||||||
AResponseInfo.ResponseNo := 200;
|
AResponseInfo.ResponseNo := 200;
|
||||||
|
AResponseInfo.FreeContentStream := True;
|
||||||
except
|
except
|
||||||
FS.Free;
|
FS.Free;
|
||||||
AResponseInfo.ResponseNo := 500;
|
AResponseInfo.ResponseNo := 500;
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ uses
|
|||||||
procedure GenerationError(Sender: TObject; const ErrorMessage: string);
|
procedure GenerationError(Sender: TObject; const ErrorMessage: string);
|
||||||
procedure GenerationUpdate(Sender: TObject; const Message: string);
|
procedure GenerationUpdate(Sender: TObject; const Message: string);
|
||||||
public
|
public
|
||||||
constructor Create(aKey:string; aSecret:string);
|
constructor Create(aKey:string; aSecret:string; aPort:integer);
|
||||||
destructor Destroy;
|
destructor Destroy;
|
||||||
procedure generate(prompt:string; aNick:string);
|
procedure generate(prompt:string; aNick:string);
|
||||||
procedure ActiveServer(aEn: boolean);
|
procedure ActiveServer(aEn: boolean);
|
||||||
@@ -51,10 +51,10 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
constructor TKandinsky_Web.Create(aKey:string; aSecret:string);
|
constructor TKandinsky_Web.Create(aKey:string; aSecret:string; aPort:integer);
|
||||||
begin
|
begin
|
||||||
IdHTTPServer1 := TIdHTTPServer.Create;
|
IdHTTPServer1 := TIdHTTPServer.Create;
|
||||||
IdHTTPServer1.DefaultPort := 8087;
|
IdHTTPServer1.DefaultPort := aPort;
|
||||||
IdHTTPServer1.OnCommandGet := IdHTTPServer1CommandGet;
|
IdHTTPServer1.OnCommandGet := IdHTTPServer1CommandGet;
|
||||||
ka:=TFusionBrainAPI.Create(nil,aKey, aSecret);
|
ka:=TFusionBrainAPI.Create(nil,aKey, aSecret);
|
||||||
ka.OnGenerationDone := GenerationDone;
|
ka.OnGenerationDone := GenerationDone;
|
||||||
|
|||||||
Reference in New Issue
Block a user