исправил оповещения, теперь работают четко

This commit is contained in:
PC1\PTyTb
2025-08-16 22:42:29 +03:00
parent 2386d14b86
commit fd1c6b6bb8
17 changed files with 968 additions and 928 deletions
+153 -240
View File
@@ -7,7 +7,8 @@ uses
System.Variants, System.Generics.Collections, ShellAPI, uSoundManager,
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.ScrollBox, FMX.Grid, uRecords, uDataBase, FMX.Menus, uKeyEvent;
FMX.ScrollBox, FMX.Grid, uRecords, uDataBase, FMX.Menus, uKeyEvent,
fColorSettings, fFontSettings;
type
TfrEvents = class(TFrame)
@@ -42,16 +43,13 @@ type
procedure MenuItem1Click(Sender: TObject);
procedure cbActionsChange(Sender: TObject);
private
{ Private declarations }
procedure toLog(aCode: integer; aMethod: string; aMess: string);
procedure toLog(aCode: integer; aMethod, aMess: string);
procedure ExecuteAction(const aAction: integer; const aParam, aUserInput, aUserName, aUserLogin: string);
public
{ Public declarations }
ListEvents: TArray<TEventGlobal>;
CustomRewards: Tlist<TCustomRevards>;
CustomRewardEvents: Tlist<TCustomRewardEvent>;
CustomRewardEvents: TList<TCustomRewardEvent>;
procedure UpdateGrid;
procedure LoadCustomRevards();
procedure ESOnGetCustomReward(CustomReward: TCustomRewardEvent);
procedure OnDonate(aNick, aMessage, aSum: string);
end;
@@ -62,36 +60,40 @@ implementation
uses uGeneral;
{ --- UI --- }
procedure TfrEvents.btnAddClick(Sender: TObject);
var
NewRec: TEventGlobal;
begin
if (cbEventList.Text = '') or (cbActions.Text = '') then
exit;
if (cbEventList.ItemIndex < 0) or (cbActions.ItemIndex < 0) then
Exit;
NewRec.Event := cbEventList.ItemIndex;
NewRec.Action := cbActions.ItemIndex;
NewRec.Param := edtParams.Text;
if edtIF.Visible then
NewRec.Condition := edtIF.Text;
if cbRevards.Visible then
NewRec.Condition := edtIF.Text
else if cbRevards.Visible then
NewRec.Condition := cbRevards.Text;
SetLength(ListEvents, Length(ListEvents) + 1);
ListEvents[High(ListEvents)] := NewRec;
ListEvents := ListEvents + [NewRec];
DB.SaveRecordArray<TEventGlobal>('ListEvents', ListEvents);
UpdateGrid;
end;
procedure TfrEvents.btnDeleteClick(Sender: TObject);
var
i, RowIndex: integer;
RowIndex: integer;
begin
RowIndex := sgEvents.Row;
if (RowIndex < 0) or (RowIndex > High(ListEvents)) then
exit;
for i := RowIndex to High(ListEvents) - 1 do
ListEvents[i] := ListEvents[i + 1];
SetLength(ListEvents, Length(ListEvents) - 1);
Exit;
Delete(ListEvents, RowIndex, 1);
DB.SaveRecordArray<TEventGlobal>('ListEvents', ListEvents);
UpdateGrid;
end;
@@ -106,265 +108,172 @@ begin
edtIF.Visible := cbEventList.ItemIndex = 0;
cbRevards.Visible := cbEventList.ItemIndex = 1;
Label2.Visible := cbEventList.ItemIndex <= 1;
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
i, i2: integer;
req, s: string;
hr: TCustomRewardEvent;
sm: TSongMachine;
myAction: integer;
f: TfrColorSettings;
t: TfrFontSettings;
i, j: Integer;
notify: TOBSNotify;
se: TStyleEvent;
begin
sm := TSongMachine.Create;
try
toLog(3, 'ESOnGetCustomReward', 'Íà÷àëî îáðàáîòêè íàãðàäû: ' +
CustomReward.Event.revard.Title);
s := '[' + CustomReward.Event.user_name +
'] êóïèë çà áàëëû êàíàëà íàãðàäó "' +
CustomReward.Event.revard.Title + '" ';
if CustomReward.Event.user_input <> '' then
begin
toLog(0, 'ESOnGetCustomReward', 'Ïîëüçîâàòåëüñêèé ââîä: ' +
CustomReward.Event.user_input);
s := s + ' è ïåðåäàë ñòðîêó ' + CustomReward.Event.user_input
end;
case aAction of
0: begin // Íàæàòü êíîïêó
toLog(0, 'ExecuteAction', 'Ñèìóëÿöèÿ íàæàòèÿ: ' + aParam);
kePoints.SimulateKeyPress(aParam, 500);
end;
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
notify := TTW_Bot.frOBS1.listNotify[i];
se.Title := StringReplace(notify.HeaderText, '[NICK]', aUserName, [rfReplaceAll]);
se.Context := notify.MessText;
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
begin
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;
1:
begin // âîñïðîèçâåäåíèå çâóêà
toLog(0, 'ESOnGetCustomReward', 'Âîñïðîèçâåäåíèå çâóêà: ' +
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;
for j := 0 to TTW_Bot.frOBS1.EventWebServers.Count - 1 do
TTW_Bot.frOBS1.EventWebServers[j].WebServerChat.AddMessage(se);
end;
finally
f.Free;
t.Free;
end;
end;
4: toLog(0, 'ExecuteAction', 'Íàïèñàòü â ÷àò: ' + aUserInput);
5: begin // Çàïóñê ôàéëà
toLog(0, 'ExecuteAction', 'Çàïóñê ôàéëà: ' + aParam);
ShellExecute(0, 'open', PWideChar(aParam), nil, nil, 0);
end;
end;
finally
sm.Free;
end;
end;
procedure TfrEvents.LoadCustomRevards();
procedure TfrEvents.ESOnGetCustomReward(CustomReward: TCustomRewardEvent);
var
cr: TCustomRevards;
ev: TEventGlobal;
begin
CustomRewards.Clear;
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;
toLog(3, 'ESOnGetCustomReward', 'Íà÷àëî îáðàáîòêè íàãðàäû: ' + CustomReward.Event.revard.Title);
procedure TfrEvents.MenuItem1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
TEdit(PopupMenu1.PopupComponent).Text := OpenDialog1.FileName;
for ev in ListEvents do
if (ev.Event = 1) and (ev.Condition = CustomReward.Event.revard.Title) then
ExecuteAction(ev.Action, ev.Param, CustomReward.Event.user_input, CustomReward.Event.user_name, CustomReward.Event.user_login);
end;
procedure TfrEvents.OnDonate(aNick, aMessage, aSum: string);
var
i, i2: integer;
req, s: string;
hr: TCustomRewardEvent;
sm: TSongMachine;
myAction: integer;
j: integer;
aSumInt: integer;
BestRow: integer;
BestPriority: integer;
BestValue: integer;
i, aSumInt, BestRow, BestPriority, BestValue,
CurrentPriority, CurrentValue, MinVal, MaxVal: integer;
Condition: string;
CurrentPriority: integer;
CurrentValue: integer;
MinVal, MaxVal: integer;
Parts: tstringlist;
se: TStyleEvent;
notify: TEventGlobal;
Parts: TStringList;
begin
aSumInt := StrToIntDef(aSum, 0);
BestRow := -1;
BestPriority := -1;
BestValue := 0;
for i := 0 to high(ListEvents) do
for i := 0 to High(ListEvents) do
begin
if ListEvents[i].Event = 0 then
if ListEvents[i].Event <> 0 then
Continue;
Condition := ListEvents[i].Condition;
CurrentPriority := -1;
CurrentValue := 0;
if TryStrToInt(Condition, CurrentValue) then
begin
Condition := ListEvents[i].Condition;
CurrentPriority := -1;
CurrentValue := 0;
// Ïðîâåðêà íà òî÷íîå çíà÷åíèå
if Pos('-', Condition) = 0 then
begin
if Pos('>', Condition) = 0 then
if aSumInt = CurrentValue then
CurrentPriority := 4;
end
else if Pos('-', Condition) > 0 then
begin
Parts := TStringList.Create;
try
Parts.Delimiter := '-';
Parts.StrictDelimiter := True;
Parts.DelimitedText := Condition;
if Parts.Count = 2 then
begin
if Pos('<', Condition) = 0 then
MinVal := StrToIntDef(Trim(Parts[0]), 0);
MaxVal := StrToIntDef(Trim(Parts[1]), 0);
if (aSumInt >= MinVal) and (aSumInt <= MaxVal) then
begin
// Òî÷íîå çíà÷åíèå
CurrentValue := StrToIntDef(Condition, -1);
if aSumInt = CurrentValue then
CurrentPriority := 4;
CurrentPriority := 3;
CurrentValue := MinVal;
end;
end;
finally
Parts.Free;
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 := 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
else if (Condition.StartsWith('>')) then
begin
CurrentValue := StrToIntDef(Copy(Condition, 2), 0);
if aSumInt >= CurrentValue then
CurrentPriority := 2;
end
else if (Condition.StartsWith('<')) then
begin
CurrentValue := StrToIntDef(Copy(Condition, 2), 0);
if aSumInt <= CurrentValue then
CurrentPriority := 1;
end;
finally
sm.Free;
if (CurrentPriority <> -1) and
((CurrentPriority > BestPriority) or
((CurrentPriority = BestPriority) and
(((CurrentPriority in [2,3]) and (CurrentValue > BestValue)) or
((CurrentPriority = 1) and (CurrentValue < BestValue))))) then
begin
BestPriority := CurrentPriority;
BestValue := CurrentValue;
BestRow := i;
end;
end;
if BestRow <> -1 then
ExecuteAction(ListEvents[BestRow].Action, ListEvents[BestRow].Param, aMessage, aNick, aNick);
end;
procedure TfrEvents.toLog(aCode: integer; aMethod, aMess: string);
begin
TTW_Bot.toLog('fEvents', aMethod, aMess, aCode);
end;
procedure TfrEvents.UpdateGrid;
var
@@ -372,11 +281,9 @@ var
begin
sgEvents.BeginUpdate;
try
sgEvents.RowCount := 0; // Ñáðàñûâàåì ñòðîêè (îñòàâëÿåì òîëüêî çàãîëîâêè)
sgEvents.RowCount := Length(ListEvents);
for i := 0 to High(ListEvents) do
begin
sgEvents.RowCount := i + 1;
sgEvents.Cells[0, i] := cbEventList.Items[ListEvents[i].Event];
sgEvents.Cells[1, i] := ListEvents[i].Condition;
sgEvents.Cells[2, i] := cbActions.Items[ListEvents[i].Action];
@@ -387,4 +294,10 @@ begin
end;
end;
procedure TfrEvents.toLog(aCode: integer; aMethod, aMess: string);
begin
TTW_Bot.toLog('fEvents', aMethod, aMess, aCode);
end;
end.
+2 -2
View File
@@ -14,8 +14,8 @@ object frOBS: TfrOBS
RowCount = 0
Options = [ColumnResize, ColumnMove, ColLines, RowLines, Tabs, Header, HeaderClick, AutoDisplacement]
OnCellDblClick = sgWebChatsCellDblClick
Viewport.Width = 685.000000000000000000
Viewport.Height = 164.000000000000000000
Viewport.Width = 689.000000000000000000
Viewport.Height = 189.000000000000000000
object IntegerColumn1: TIntegerColumn
Header = #1055#1086#1088#1090
HeaderSettings.TextSettings.WordWrap = False
+184 -361
View File
@@ -5,11 +5,12 @@ interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, uCustomEmoties,
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,
System.Rtti, FMX.Grid.Style, FMX.Grid, FMX.ScrollBox, FMX.Edit, FMX.Colors,
FMX.ListBox, FMX.EditBox, FMX.SpinBox, FMX.Controls.Presentation, uRecords,
System.Generics.Defaults, fFontSettings, System.Character;
System.Generics.Defaults, System.Character;
type
TChatWebServers = record
@@ -31,10 +32,17 @@ type
type
TEventWebServers = record
port: integer;
typeEvent: integer;
se: TStyleEvent;
WebServerChat: TTTW_Events;
end;
type
TKandinskyWebServers = record
port: integer;
WebServerKandinsky: TKandinsky_Web;
end;
type
TfrOBS = class(TFrame)
sgWebChats: TStringGrid;
@@ -71,11 +79,12 @@ type
ChatEmotes: Tlist<TEmotes>;
ChatWebServers: Tlist<TChatWebServers>;
EventWebServers: Tlist<TEventWebServers>;
KandinskyWebServers: Tlist<TKandinskyWebServers>;
procedure MsgToWebServer(const aRecord: TTwitchChatMessage);
procedure toEventWebServer(CustomReward: TFollowEvent); overload; // follow
procedure toEventWebServer(CustomReward: TSubEvent); overload; // sub
procedure toEventWebServer(CustomReward: TRaidEvent); overload; // raid
procedure toEventWebServer(CustomReward: TGiftEvent); overload; // gift
procedure toEventWebServer(aEvent: TFollowEvent); overload; // follow
procedure toEventWebServer(aEvent: TSubEvent); overload; // sub
procedure toEventWebServer(aEvent: TRaidEvent); overload; // raid
procedure toEventWebServer(aEvent: TGiftEvent); overload; // gift
procedure toEventWebServer(aNick, aSum, aText: string); overload; // donate
procedure CreateWebEvents(eventsSettings: TOBSNotify);
@@ -91,7 +100,7 @@ type
procedure AddKandinsky(newRecord: TOBSKandinsky);
procedure DelKandinsky(aPort: integer);
procedure CreateWebKandinsky(aRecord: TOBSKandinsky);
end;
implementation
@@ -290,6 +299,7 @@ begin
SetLength(listChats, Length(listChats) + 1);
listChats[High(listChats)] := newRecord;
UpdateGridFromArray;
db.SaveRecordArray<TOBSChat>('listChats', listChats);
CreateWebChat(newRecord);
end;
@@ -300,6 +310,7 @@ begin
listKandinsky[High(listKandinsky)] := newRecord;
UpdateGridFromArray;
db.SaveRecordArray<TOBSKandinsky>('listKandinsky', listKandinsky);
CreateWebKandinsky(newRecord);
end;
procedure TfrOBS.AddNotify(newRecord: TOBSNotify);
@@ -308,7 +319,7 @@ begin
listNotify[High(listNotify)] := newRecord;
UpdateGridFromArray;
db.SaveRecordArray<TOBSNotify>('listNotify', listNotify);
CreateWebEvents(newRecord);
CreateWebEvents(newRecord);
end;
procedure TfrOBS.btnCreateOBSChatClick(Sender: TObject);
@@ -383,12 +394,10 @@ var
procedure LoadFontList(const mySL: tstringlist);
var
SearchRec: TSearchRec;
n: integer;
begin
if not DirectoryExists(myConst.fontsPath) then
CreateDir(myConst.fontsPath);
n := 1;
if FindFirst(IncludeTrailingPathDelimiter(myConst.fontsPath) + '*.*',
faArchive, SearchRec) = 0 then
try
@@ -396,7 +405,6 @@ var
if (SearchRec.Attr and faAnyFile) = SearchRec.Attr then
begin
mySL.Add(SearchRec.name);
Inc(n);
end;
until FindNext(SearchRec) <> 0;
finally
@@ -448,12 +456,9 @@ var
procedure LoadFontList(const mySL: tstringlist);
var
SearchRec: TSearchRec;
n: integer;
begin
if not DirectoryExists(myConst.fontsPath) then
CreateDir(myConst.fontsPath);
n := 1;
if FindFirst(IncludeTrailingPathDelimiter(myConst.fontsPath) + '*.*',
faArchive, SearchRec) = 0 then
try
@@ -461,7 +466,6 @@ var
if (SearchRec.Attr and faAnyFile) = SearchRec.Attr then
begin
mySL.Add(SearchRec.name);
Inc(n);
end;
until FindNext(SearchRec) <> 0;
finally
@@ -470,24 +474,37 @@ var
end;
function GetColorFromColorPanel(aColor: TAlphaColor): string;
var
Color: TAlphaColor;
r, G, B: Byte;
A: Real;
FS: TFormatSettings;
begin
Color := aColor;
r := TAlphaColorRec(Color).r;
G := TAlphaColorRec(Color).G;
B := TAlphaColorRec(Color).B;
A := TAlphaColorRec(Color).A / 255; // Ïðåîáðàçóåì àëüôà-êàíàë â äèàïàçîí 0..1
var
Color: TAlphaColor;
r, G, B: Byte;
A: Real;
FS: TFormatSettings;
begin
Color := aColor;
r := TAlphaColorRec(Color).r;
G := TAlphaColorRec(Color).G;
B := TAlphaColorRec(Color).B;
A := TAlphaColorRec(Color).A / 255;
// Ïðåîáðàçóåì àëüôà-êàíàë â äèàïàçîí 0..1
// Óñòàíàâëèâàåì òî÷êó â êà÷åñòâå äåñÿòè÷íîãî ðàçäåëèòåëÿ
FS := TFormatSettings.Create;
FS.DecimalSeparator := '.';
// Óñòàíàâëèâàåì òî÷êó â êà÷åñòâå äåñÿòè÷íîãî ðàçäåëèòåëÿ
FS := TFormatSettings.Create;
FS.DecimalSeparator := '.';
result := Format('rgba(%d, %d, %d, %.2f)', [r, G, B, A], FS);
end;
result := Format('rgba(%d, %d, %d, %.2f)', [r, G, B, A], FS);
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
fonts := tstringlist.Create;
@@ -495,25 +512,25 @@ begin
t := TfrFontSettings.Create(self);
try
LoadFontList(fonts);
EventWebServer.WebServerChat := TTTW_Events.Create(fonts,eventsSettings.port);
EventWebServer.WebServerChat := TTTW_Events.Create(fonts,
eventsSettings.port);
EventWebServer.port := eventsSettings.port;
EventWebServer.se.title := eventsSettings.HeaderText;
EventWebServer.se.Context:=eventsSettings.MessText;
EventWebServer.se.Url:=eventsSettings.Picture;
EventWebServer.se.SoundURL:=eventsSettings.Sound;
EventWebServer.se.Timestamp:=now;
EventWebServer.se.TimeMsg:=eventsSettings.TimeMess;
EventWebServer.se.FontTitle.Font:= t.cbFontStyleDefault.Items[eventsSettings.HeaderStyleFont];
EventWebServer.se.FontTitle.Size:=eventsSettings.HeaderSizeFont;
EventWebServer.se.FontTitle.Color:=t.ccbFontColor.Items[eventsSettings.HeaderColorFont];
EventWebServer.se.FontContext.Font:= t.cbFontStyleDefault.Items[eventsSettings.MessStyleFont];
EventWebServer.se.FontContext.Size:=eventsSettings.MessSizeFont;
EventWebServer.se.FontContext.Color:=t.ccbFontColor.Items[eventsSettings.MessColorFont];
EventWebServer.se.BorderColor:=f.ccbStyleBorderColor.Items[eventsSettings.ColorBorder];
EventWebServer.se.BorderSize:=eventsSettings.SolidBorder;
EventWebServer.se.BlockColor:=GetColorFromColorPanel(f.cpStyleBlockColor.Color);
EventWebServer.typeEvent := eventsSettings.typeEvent;
EventWebServer.se.Title := eventsSettings.HeaderText;
EventWebServer.se.Context := eventsSettings.MessText;
EventWebServer.se.Url := eventsSettings.Picture;
EventWebServer.se.SoundURL := eventsSettings.Sound;
EventWebServer.se.Timestamp := now;
EventWebServer.se.TimeMsg := eventsSettings.TimeMess;
EventWebServer.se.FontTitle.Font := eventsSettings.HeaderStyleFont;
EventWebServer.se.FontTitle.Size := eventsSettings.HeaderSizeFont;
EventWebServer.se.FontTitle.Color := eventsSettings.HeaderColorFont;
EventWebServer.se.FontContext.Font := eventsSettings.MessStyleFont;
EventWebServer.se.FontContext.Size := eventsSettings.MessSizeFont;
EventWebServer.se.FontContext.Color :=eventsSettings.MessColorFont;
EventWebServer.se.BorderColor := eventsSettings.ColorBorder;
EventWebServer.se.BorderSize := eventsSettings.SolidBorder;
EventWebServer.se.BlockColor := eventsSettings.ColorBlock;
EventWebServers.Add(EventWebServer);
EventWebServers[EventWebServers.Count - 1].WebServerChat.ActiveServer(True);
finally
@@ -523,6 +540,20 @@ begin
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);
var
i, j: integer;
@@ -566,6 +597,9 @@ begin
Break;
end;
end;
KandinskyWebServers[i].WebServerKandinsky.ActiveServer(false);
KandinskyWebServers[i].WebServerKandinsky.Destroy;
KandinskyWebServers.Delete(i);
UpdateGridFromArray;
db.SaveRecordArray<TOBSKandinsky>('listKandinsky', listKandinsky);
end;
@@ -588,7 +622,9 @@ begin
Break;
end;
end;
EventWebServers[i].WebServerChat.ActiveServer(false);
EventWebServers[i].WebServerChat.Destroy;
EventWebServers.Delete(i);
UpdateGridFromArray;
db.SaveRecordArray<TOBSNotify>('listNotify', listNotify);
end;
@@ -654,12 +690,36 @@ end;
procedure TfrOBS.EdtNotify(newRecord: TOBSNotify; oldPort: integer);
var
i: integer;
i,mi: integer; ws:TEventWebServers;
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
if listNotify[i].port = oldPort then
begin
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;
db.SaveRecordArray<TOBSNotify>('listNotify', listNotify);
Break;
@@ -716,342 +776,105 @@ begin
end;
end;
procedure TfrOBS.toEventWebServer(CustomReward: TFollowEvent);
{
0 Îòñëåæèâàíèå
1 Ïîäïèñêà
2 Ïîäàðî÷íàÿ ïîäïèñêà
3 Ðåéä
4 Äîíàò
5 Ñâîå
}
procedure TfrOBS.toEventWebServer(aEvent: TFollowEvent);
var
se: TStyleEvent;
i, j: integer;
f: TfrColorSettings;
t: TfrFontSettings;
notify: TOBSNotify;
i: integer;
ws: TEventWebServers;
begin
f := TfrColorSettings.Create(self);
t := TfrFontSettings.Create(self);
try
for i := 0 to high(listNotify) do
TTW_Bot.toLog('fOBS', 'toEventWebServer', 'Ïîëó÷åíî ñîáûòèå Follow', 0);
for i := 0 to EventWebServers.Count - 1 do
begin
if EventWebServers[i].typeEvent = 0 then
begin
if listNotify[i].TypeEvent = 0 then
begin
notify := listNotify[i];
se.Title := notify.HeaderText;
se.Title := StringReplace(se.Title, '[NICK]',
CustomReward.event.user_name, [rfReplaceAll]);
se.Context := notify.MessText;
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;
ws := EventWebServers[i];
ws.se.Title := StringReplace(ws.se.Title, '[NICK]',
aEvent.event.user_name, [rfReplaceAll]);
ws.se.Timestamp:=now;
ws.se.RequireInteraction := True;
TTW_Bot.toLog('fOBS', 'toEventWebServer.BlockColor', ws.se.BlockColor, 3);
EventWebServers[i].WebServerChat.AddMessage(ws.se);
end;
finally
f.Free;
t.Free;
end;
end;
procedure TfrOBS.toEventWebServer(CustomReward: TSubEvent);
procedure TfrOBS.toEventWebServer(aEvent: TSubEvent);
var
se: TStyleEvent;
i, j: integer;
f: TfrColorSettings;
t: TfrFontSettings;
notify: TOBSNotify;
i: integer;
ws: TEventWebServers;
begin
f := TfrColorSettings.Create(self);
t := TfrFontSettings.Create(self);
try
for i := 0 to high(listNotify) do
begin
if listNotify[i].TypeEvent = 1 then
begin
notify := listNotify[i];
se.Title := notify.HeaderText;
se.Title := StringReplace(se.Title, '[NICK]',
CustomReward.event.user_name, [rfReplaceAll]);
se.Context := notify.MessText;
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;
for i := 0 to EventWebServers.Count - 1 do
begin
if EventWebServers[i].typeEvent <> 1 then
Continue;
ws := EventWebServers[i];
ws.se.Title := StringReplace(ws.se.Title, '[NICK]', aEvent.event.user_name,
[rfReplaceAll]);
EventWebServers[i] := ws;
EventWebServers[i].WebServerChat.AddMessage(EventWebServers[i].se);
end;
end;
procedure TfrOBS.toEventWebServer(CustomReward: TRaidEvent);
procedure TfrOBS.toEventWebServer(aEvent: TRaidEvent);
var
se: TStyleEvent;
i, j: integer;
f: TfrColorSettings;
t: TfrFontSettings;
notify: TOBSNotify;
i: integer;
ws: TEventWebServers;
begin
f := TfrColorSettings.Create(self);
t := TfrFontSettings.Create(self);
try
for i := 0 to high(listNotify) do
begin
if listNotify[i].TypeEvent = 3 then
begin
notify := listNotify[i];
se.Title := notify.HeaderText;
se.Title := StringReplace(se.Title, '[NICK]',
CustomReward.event.from_broadcaster_user_name, [rfReplaceAll]);
se.Context := notify.MessText;
se.Context := StringReplace(se.Context, '[SUM]',
inttostr(CustomReward.event.viewers), [rfReplaceAll]);
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;
for i := 0 to EventWebServers.Count - 1 do
begin
if EventWebServers[i].typeEvent <> 3 then
Continue;
ws := EventWebServers[i];
ws.se.Title := StringReplace(ws.se.Title, '[NICK]',
aEvent.event.from_broadcaster_user_name, [rfReplaceAll]);
ws.se.Context := StringReplace(ws.se.Context, '[SUM]',
inttostr(aEvent.event.viewers), [rfReplaceAll]);
EventWebServers[i] := ws;
EventWebServers[i].WebServerChat.AddMessage(EventWebServers[i].se);
end;
end;
procedure TfrOBS.toEventWebServer(CustomReward: TGiftEvent);
procedure TfrOBS.toEventWebServer(aEvent: TGiftEvent);
var
se: TStyleEvent;
i, j: integer;
f: TfrColorSettings;
t: TfrFontSettings;
notify: TOBSNotify;
i: integer;
ws: TEventWebServers;
begin
f := TfrColorSettings.Create(self);
t := TfrFontSettings.Create(self);
try
for i := 0 to high(listNotify) do
begin
if listNotify[i].TypeEvent = 2 then
begin
notify := listNotify[i];
se.Title := notify.HeaderText;
se.Title := StringReplace(se.Title, '[NICK]',
CustomReward.event.user_name, [rfReplaceAll]);
se.Context := notify.MessText;
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;
for i := 0 to EventWebServers.Count - 1 do
begin
if EventWebServers[i].typeEvent <> 2 then
Continue;
ws := EventWebServers[i];
ws.se.Title := StringReplace(ws.se.Title, '[NICK]', aEvent.event.user_name,
[rfReplaceAll]);
EventWebServers[i] := ws;
EventWebServers[i].WebServerChat.AddMessage(EventWebServers[i].se);
end;
end;
procedure TfrOBS.toEventWebServer(aNick, aSum, aText: string);
var
i, j: integer;
aSumInt: integer;
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;
i: integer;
ws: TEventWebServers;
begin
aSumInt := StrToIntDef(aSum, 0);
BestRow := -1;
BestPriority := -1;
BestValue := 0;
for i := 0 to high(listNotify) do
for i := 0 to EventWebServers.Count - 1 do
begin
if listNotify[i].TypeEvent = 4 then
begin
Condition := Trim(listNotify[i].TypeEdit);
if Condition = '' then
Continue;
CurrentPriority := -1;
CurrentValue := 0;
// Ïðîâåðêà íà òî÷íîå çíà÷åíèå
if Pos('-', Condition) = 0 then
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;
if EventWebServers[i].typeEvent <> 4 then
Continue;
ws := EventWebServers[i];
ws.se.Title := StringReplace(ws.se.Title, '[NICK]', aNick, [rfReplaceAll]);
ws.se.Context := StringReplace(ws.se.Context, '[SUM]', aSum,
[rfReplaceAll]);
EventWebServers[i] := ws;
EventWebServers[i].WebServerChat.AddMessage(EventWebServers[i].se);
end;
end;
+109
View File
@@ -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
+66
View File
@@ -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.