Initial commit

This commit is contained in:
Vladimir Solodovnikov
2024-10-01 01:10:31 +03:00
commit 9b30c25670
13 changed files with 641 additions and 0 deletions
+30
View File
@@ -0,0 +1,30 @@
**/.classpath
**/.dockerignore
**/.env
**/.git
**/.gitignore
**/.project
**/.settings
**/.toolstarget
**/.vs
**/.vscode
**/*.*proj.user
**/*.dbmdl
**/*.jfm
**/azds.yaml
**/bin
**/charts
**/docker-compose*
**/Dockerfile*
**/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
LICENSE
README.md
!**/.gitignore
!.git/HEAD
!.git/config
!.git/packed-refs
!.git/refs/heads/**
+398
View File
@@ -0,0 +1,398 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from httpsgithub.comgithubgitignoreblobmainVisualStudio.gitignore
# User-specific files
.rsuser
.suo
.user
.userosscache
.sln.docstates
# User-specific files (MonoDevelopXamarin Studio)
.userprefs
# Mono auto generated files
mono_crash.
# Build results
[Dd]ebug
[Dd]ebugPublic
[Rr]elease
[Rr]eleases
x64
x86
[Ww][Ii][Nn]32
[Aa][Rr][Mm]
[Aa][Rr][Mm]64
bld
[Bb]in
[Oo]bj
[Ll]og
[Ll]ogs
# Visual Studio 20152017 cacheoptions directory
.vs
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot
# Visual Studio 2017 auto generated files
Generated Files
# MSTest test Results
[Tt]est[Rr]esult
[Bb]uild[Ll]og.
# NUnit
.VisualState.xml
TestResult.xml
nunit-.xml
# Build Results of an ATL Project
[Dd]ebugPS
[Rr]eleasePS
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
_i.c
_p.c
_h.h
.ilk
.meta
.obj
.iobj
.pch
.pdb
.ipdb
.pgc
.pgd
.rsp
.sbr
.tlb
.tli
.tlh
.tmp
.tmp_proj
_wpftmp.csproj
.log
.tlog
.vspscc
.vssscc
.builds
.pidb
.svclog
.scc
# Chutzpah Test files
_Chutzpah
# Visual C++ cache files
ipch
.aps
.ncb
.opendb
.opensdf
.sdf
.cachefile
.VC.db
.VC.VC.opendb
# Visual Studio profiler
.psess
.vsp
.vspx
.sap
# Visual Studio Trace Files
.e2e
# TFS 2012 Local Workspace
$tf
# Guidance Automation Toolkit
.gpState
# ReSharper is a .NET coding add-in
_ReSharper
.[Rr]e[Ss]harper
.DotSettings.user
# TeamCity is a build add-in
_TeamCity
# DotCover is a Code Coverage Tool
.dotCover
# AxoCover is a Code Coverage Tool
.axoCover
!.axoCoversettings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage.json
coverage.xml
coverage.info
# Visual Studio code coverage results
.coverage
.coveragexml
# NCrunch
_NCrunch_
.crunch.local.xml
nCrunchTemp_
# MightyMoose
.mm.
AutoTest.Net
# Web workbench (sass)
.sass-cache
# Installshield output folder
[Ee]xpress
# DocProject is a documentation generator add-in
DocProjectbuildhelp
DocProjectHelp.HxT
DocProjectHelp.HxC
DocProjectHelp.hhc
DocProjectHelp.hhk
DocProjectHelp.hhp
DocProjectHelpHtml2
DocProjectHelphtml
# Click-Once directory
publish
# Publish Web Output
.[Pp]ublish.xml
.azurePubxml
# Note Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
.pubxml
.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts
# NuGet Packages
.nupkg
# NuGet Symbol Packages
.snupkg
# The packages folder can be ignored because of Package Restore
[Pp]ackages
# except build, which is used as an MSBuild target.
![Pp]ackagesbuild
# Uncomment if necessary however generally it will be regenerated when needed
#![Pp]ackagesrepositories.config
# NuGet v3's project.json files produces more ignorable files
.nuget.props
.nuget.targets
# Microsoft Azure Build Output
csx
.build.csdef
# Microsoft Azure Emulator
ecf
rcf
# Windows Store app package directories and files
AppPackages
BundleArtifacts
Package.StoreAssociation.xml
_pkginfo.txt
.appx
.appxbundle
.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
.[Cc]ache
# but keep track of directories ending in .cache
!.[Cc]ache
# Others
ClientBin
~$
~
.dbmdl
.dbproj.schemaview
.jfm
.pfx
.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (httpsgithub.comgithubgitignorepull2483#issue-259490424)
#.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (httpsgithub.comgithubgitignorepull1529#issuecomment-104372622)
#bower_components
# RIASilverlight projects
Generated_Code
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files
Backup
UpgradeLog.XML
UpgradeLog.htm
ServiceFabricBackup
.rptproj.bak
# SQL Server files
.mdf
.ldf
.ndf
# Business Intelligence projects
.rdl.data
.bim.layout
.bim_.settings
.rptproj.rsuser
- [Bb]ackup.rdl
- [Bb]ackup ([0-9]).rdl
- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies
# GhostDoc plugin setting file
.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules
# Visual Studio 6 build log
.plg
# Visual Studio 6 workspace options file
.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
.vbw
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
.vbp
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
.dsw
.dsp
# Visual Studio 6 technical files
.ncb
.aps
# Visual Studio LightSwitch build output
.HTMLClientGeneratedArtifacts
.DesktopClientGeneratedArtifacts
.DesktopClientModelManifest.xml
.ServerGeneratedArtifacts
.ServerModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paketpaket.exe
paket-files
# FAKE - F# Make
.fake
# CodeRush personal settings
.crpersonal
# Python Tools for Visual Studio (PTVS)
__pycache__
.pyc
# Cake - Uncomment if you are using it
# tools
# !toolspackages.config
# Tabs Studio
.tss
# Telerik's JustMock configuration file
.jmconfig
# BizTalk build output
.btp.cs
.btm.cs
.odx.cs
.xsd.cs
# OpenCover UI analysis results
OpenCover
# Azure Stream Analytics local run output
ASALocalRun
# MSBuild Binary and Structured Log
.binlog
# NVidia Nsight GPU debugger configuration file
.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor
# Local History for Visual Studio
.localhistory
# Visual Studio History (VSHistory) files
.vshistory
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup
# Ionide (cross platform F# VS Code tools) working folder
.ionide
# Fody - auto-generated XML schema
FodyWeavers.xsd
# VS Code files for those working on multiple tools
.vscode
!.vscodesettings.json
!.vscodetasks.json
!.vscodelaunch.json
!.vscodeextensions.json
.code-workspace
# Local History for Visual Studio Code
.history
# Windows Installer files from build outputs
.cab
.msi
.msix
.msm
.msp
# JetBrains Rider
.sln.iml
+30
View File
@@ -0,0 +1,30 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.10.35122.118
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SVBotApp", "SVBotApp\SVBotApp.csproj", "{A1D5F832-7965-4752-8D11-9B91D39086D5}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Элементы решения", "Элементы решения", "{9CE191A0-1911-4E36-802B-5677313377F8}"
ProjectSection(SolutionItems) = preProject
nuget.config = nuget.config
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A1D5F832-7965-4752-8D11-9B91D39086D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A1D5F832-7965-4752-8D11-9B91D39086D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A1D5F832-7965-4752-8D11-9B91D39086D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A1D5F832-7965-4752-8D11-9B91D39086D5}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {511F0F10-D3BD-4A48-A066-965634E55F66}
EndGlobalSection
EndGlobal
+8
View File
@@ -0,0 +1,8 @@
namespace SVBotApp.Configuration;
public sealed class BotSettings
{
public const string SectionName = "Bot";
public string Secret { get; set; } = null!;
}
+23
View File
@@ -0,0 +1,23 @@
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/runtime:8.0 AS base
USER app
WORKDIR /app
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["SVBotApp/SVBotApp.csproj", "SVBotApp/"]
RUN dotnet restore "./SVBotApp/SVBotApp.csproj"
COPY . .
WORKDIR "/src/SVBotApp"
RUN dotnet build "./SVBotApp.csproj" -c $BUILD_CONFIGURATION -o /app/build
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./SVBotApp.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "SVBotApp.dll"]
+11
View File
@@ -0,0 +1,11 @@
using SVBotApp;
using SVBotApp.Configuration;
var builder = Host.CreateApplicationBuilder(args);
builder.Services.Configure<BotSettings>(builder.Configuration.GetSection(BotSettings.SectionName));
builder.Services.AddHostedService<Worker>();
var host = builder.Build();
host.Run();
+15
View File
@@ -0,0 +1,15 @@
{
"profiles": {
"SVBotApp": {
"commandName": "Project",
"environmentVariables": {
"DOTNET_ENVIRONMENT": "Development"
},
"dotnetRunMessages": true
},
"Container (Dockerfile)": {
"commandName": "Docker"
}
},
"$schema": "http://json.schemastore.org/launchsettings.json"
}
+16
View File
@@ -0,0 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UserSecretsId>dotnet-SVBotApp-dbaa4807-7656-49a4-a49b-f451adab85b8</UserSecretsId>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.21.0" />
<PackageReference Include="Telegram.Bot" Version="21.11.0" />
</ItemGroup>
</Project>
+9
View File
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ActiveDebugProfile>SVBotApp</ActiveDebugProfile>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DebuggerFlavor>ProjectDebugger</DebuggerFlavor>
</PropertyGroup>
</Project>
+76
View File
@@ -0,0 +1,76 @@
using Microsoft.Extensions.Options;
using SVBotApp.Configuration;
using Telegram.Bot;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
using Telegram.Bot.Types.ReplyMarkups;
namespace SVBotApp;
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
private readonly BotSettings _botSettings;
private TelegramBotClient? _botClient = null;
public Worker(ILogger<Worker> logger, IOptions<BotSettings> botSettings)
{
_logger = logger;
_botSettings = botSettings.Value;
}
protected override async Task ExecuteAsync(CancellationToken cancellationToken)
{
_botClient ??= new TelegramBotClient(_botSettings.Secret, cancellationToken: cancellationToken);
_botClient.OnMessage += OnMessageAsync;
_botClient.OnUpdate += OnUpdateAsync;
_logger.LogInformation("INITIALIZED");
}
private async Task OnUpdateAsync(Update update)
{
_logger.LogInformation("UPDATE_RECEIVED => '{update}'", update.Id);
if (update.Type == UpdateType.CallbackQuery && update.CallbackQuery != null)
{
_logger.LogInformation("PROCESS_CALLBACK_QUERY => {id}:{data}", update.CallbackQuery.Id, update.CallbackQuery.Data);
await _botClient!.EditMessageTextAsync(
update.CallbackQuery.Message!.Chat.Id,
update.CallbackQuery.Message.MessageId,
$"Button pressed: {update.CallbackQuery.Data}",
replyMarkup: new InlineKeyboardMarkup().AddButton("Step2", "step2"));
await _botClient!.AnswerCallbackQueryAsync(update.CallbackQuery.Id, string.Empty);
}
}
private async Task OnMessageAsync(Message message, UpdateType updateType)
{
if (_botClient == null)
{
return;
}
_logger.LogInformation("MESSAGE_RECEIVED => '{message}'", message.Text);
var processingMessage = await _botClient.SendTextMessageAsync(message.Chat.Id, "Processing...", protectContent: true, replyMarkup: new ReplyKeyboardRemove());
await _botClient.SendChatActionAsync(message.Chat.Id, ChatAction.Typing);
await Task.Delay(2000);
var replyMarkup = new ReplyKeyboardMarkup(true)
.AddButton("Btn 01")
.AddButton("Btn 02");
var inlineKeyboard = new InlineKeyboardMarkup()
.AddButton("Some", "some");
_ = await _botClient.SendTextMessageAsync(message.Chat.Id, $"""You've wrote: "{message.Text}".""",
protectContent: true,
replyParameters: message,
replyMarkup: inlineKeyboard);
await _botClient.DeleteMessageAsync(processingMessage.Chat.Id, processingMessage.MessageId);
}
}
+11
View File
@@ -0,0 +1,11 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"Bot": {
"Secret": "6831614155:AAGJWCeDU0Js8Wj9cN4_R4j1MXA8LFUPL2Q"
},
}
+8
View File
@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.Hosting.Lifetime": "Information"
}
}
}
+6
View File
@@ -0,0 +1,6 @@
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
<add key="Telegram.Bot" value="https://pkgs.dev.azure.com/tgbots/Telegram.Bot/_packaging/release/nuget/v3/index.json" />
</packageSources>
</configuration>