├── DotNetSocialBot.Function
├── Program.cs
├── Properties
│ └── launchSettings.json
├── StatusExtensions.cs
├── host.json
├── DotNetSocialBot.Function.csproj
├── Config.cs
├── .gitignore
└── RepostOnMastodon.cs
├── .idea
└── .idea.DotNetSocialBot
│ └── .idea
│ ├── encodings.xml
│ ├── vcs.xml
│ └── indexLayout.xml
├── DotNetSocialBot.sln
├── LICENSE.md
├── README.md
└── .gitignore
/DotNetSocialBot.Function/Program.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Extensions.Hosting;
2 |
3 | var host = new HostBuilder()
4 | .ConfigureFunctionsWorkerDefaults()
5 | .Build();
6 |
7 | host.Run();
8 |
--------------------------------------------------------------------------------
/.idea/.idea.DotNetSocialBot/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/.idea/.idea.DotNetSocialBot/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/DotNetSocialBot.Function/Properties/launchSettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "profiles": {
3 | "DotNetSocialBot.Function": {
4 | "commandName": "Project",
5 | "commandLineArgs": "--port 7245",
6 | "launchBrowser": false
7 | }
8 | }
9 | }
--------------------------------------------------------------------------------
/.idea/.idea.DotNetSocialBot/.idea/indexLayout.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/DotNetSocialBot.Function/StatusExtensions.cs:
--------------------------------------------------------------------------------
1 | using Mastonet.Entities;
2 |
3 | namespace DotNetSocialBot.FunctionApp;
4 |
5 | public static class StatusExtensions
6 | {
7 | public static bool IsReply(this Status? status)
8 | {
9 | return status?.InReplyToId != null;
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/DotNetSocialBot.Function/host.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0",
3 | "logging": {
4 | "applicationInsights": {
5 | "samplingSettings": {
6 | "isEnabled": true,
7 | "excludedTypes": "Request"
8 | },
9 | "enableLiveMetricsFilters": true
10 | }
11 | }
12 | }
--------------------------------------------------------------------------------
/DotNetSocialBot.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotNetSocialBot.Function", "DotNetSocialBot.Function\DotNetSocialBot.Function.csproj", "{271705B1-532F-4531-B20E-B69CD5167846}"
4 | EndProject
5 | Global
6 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
7 | Debug|Any CPU = Debug|Any CPU
8 | Release|Any CPU = Release|Any CPU
9 | EndGlobalSection
10 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
11 | {271705B1-532F-4531-B20E-B69CD5167846}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
12 | {271705B1-532F-4531-B20E-B69CD5167846}.Debug|Any CPU.Build.0 = Debug|Any CPU
13 | {271705B1-532F-4531-B20E-B69CD5167846}.Release|Any CPU.ActiveCfg = Release|Any CPU
14 | {271705B1-532F-4531-B20E-B69CD5167846}.Release|Any CPU.Build.0 = Release|Any CPU
15 | EndGlobalSection
16 | EndGlobal
17 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 bitbonk
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/DotNetSocialBot.Function/DotNetSocialBot.Function.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | net8.0
4 | v4
5 | Exe
6 | enable
7 | enable
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | PreserveNewest
19 |
20 |
21 | PreserveNewest
22 | Never
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | This repo is no loger actively maintained, as the https://dotnet.social Mastodon community took ownership of the bot and the code.
2 | Development of the bot continues at this fork: https://github.com/dotnet-social/bot
3 |
4 | # dotnet.social Mastodon bot
5 |
6 | This is the code for the Mastodon bot [@bot@dotnet.social](https://dotnet.social/@bot).
7 | Its goal ist to help grow and connect the .NET community on Mastodon by boosting posts that talk about .NET.
8 |
9 | The code is generic and could be used for any kind of bot that should boost posts, not just about .NET.
10 |
11 | The bot runs as an Azure function and boosts posts
12 |
13 | - where the bot was @ mentioned,
14 | - that contain at least one # hashtag that the bot follows,
15 | - that has a boost request reply, i.e. a reply with the message `boost this!` ([or similar](https://github.com/bitbonk/DotNetSocialBot/blob/d889186a212a02ca7b41d0ee955bf077323897f9/DotNetSocialBot.FunctionApp/Config.cs#L5))
16 |
17 | Posts are generally only boosted if the post to boost
18 |
19 | - does not come from this bot account itself,
20 | - does not come from any account that is marked as a bot,
21 | - is not a direct message,
22 | - is not a reply
23 |
24 | ## Contribution
25 |
26 | I am aware that this little experiment is a rather naive implementation.
27 | Any kind of contribution to make this bot better is welcome.
28 |
29 | ## Thanks
30 |
31 | - [Guillaume Lacasa](https://github.com/glacasa) ([@glacasa@mamot.fr](https://mamot.fr/@glacasa) on Mastodon) for building and maintaining [Mastonet](https://github.com/glacasa/mastonet)
32 |
--------------------------------------------------------------------------------
/DotNetSocialBot.Function/Config.cs:
--------------------------------------------------------------------------------
1 | namespace DotNetSocialBot.Function;
2 |
3 | internal static class Config
4 | {
5 | public static readonly string[] ValidBoostRequestMessages =
6 | {
7 | "bot boost this",
8 | "bot boost that",
9 | "bot boost it",
10 | "bot boost",
11 | "bot boost this please",
12 | "bot boost that please",
13 | "bot boost it please",
14 | "bot boost please",
15 | "bot boost this, please",
16 | "bot boost that, please",
17 | "bot boost it, please",
18 | "bot boost, please",
19 | "bot boost this!",
20 | "bot boost that!",
21 | "bot boost it!",
22 | "bot boost!",
23 | "bot boost this please!",
24 | "bot boost that please!",
25 | "bot boost it please!",
26 | "bot boost please!",
27 | "bot boost this, please!",
28 | "bot boost that, please!",
29 | "bot boost it, please!",
30 | "bot boost, please!",
31 | "bot boost this ☝️",
32 | "bot boost that ☝️",
33 | "bot boost it ☝️",
34 | "bot boost ☝️",
35 | "bot boost this please ☝️",
36 | "bot boost that please ☝️",
37 | "bot boost it please ☝️",
38 | "bot boost please ☝️",
39 | "bot boost this, please ☝️",
40 | "bot boost that, please ☝️",
41 | "bot boost it, please ☝️",
42 | "bot boost, please ☝️",
43 | "bot boost this! ☝️",
44 | "bot boost that! ☝️",
45 | "bot boost it! ☝️",
46 | "bot boost! ☝️",
47 | "bot boost this please! ☝️",
48 | "bot boost that please! ☝️",
49 | "bot boost it please! ☝️",
50 | "bot boost please! ☝️",
51 | "bot boost this, please! ☝️",
52 | "bot boost that, please! ☝️",
53 | "bot boost it, please! ☝️",
54 | "bot boost, please! ☝️"
55 | };
56 |
57 | public static string AccessToken =>
58 | Environment.GetEnvironmentVariable("access_token", EnvironmentVariableTarget.Process) ??
59 | throw new InvalidOperationException("access_token token not present in environment variables");
60 |
61 | public static string Instance =>
62 | Environment.GetEnvironmentVariable("instance", EnvironmentVariableTarget.Process) ??
63 | throw new InvalidOperationException("instance not present in environment variables");
64 | }
65 |
--------------------------------------------------------------------------------
/DotNetSocialBot.Function/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 |
4 | # Azure Functions localsettings file
5 | local.settings.json
6 |
7 | # User-specific files
8 | *.suo
9 | *.user
10 | *.userosscache
11 | *.sln.docstates
12 |
13 | # User-specific files (MonoDevelop/Xamarin Studio)
14 | *.userprefs
15 |
16 | # Build results
17 | [Dd]ebug/
18 | [Dd]ebugPublic/
19 | [Rr]elease/
20 | [Rr]eleases/
21 | x64/
22 | x86/
23 | bld/
24 | [Bb]in/
25 | [Oo]bj/
26 | [Ll]og/
27 |
28 | # Visual Studio 2015 cache/options directory
29 | .vs/
30 | # Uncomment if you have tasks that create the project's static files in wwwroot
31 | #wwwroot/
32 |
33 | # MSTest test Results
34 | [Tt]est[Rr]esult*/
35 | [Bb]uild[Ll]og.*
36 |
37 | # NUNIT
38 | *.VisualState.xml
39 | TestResult.xml
40 |
41 | # Build Results of an ATL Project
42 | [Dd]ebugPS/
43 | [Rr]eleasePS/
44 | dlldata.c
45 |
46 | # DNX
47 | project.lock.json
48 | project.fragment.lock.json
49 | artifacts/
50 |
51 | *_i.c
52 | *_p.c
53 | *_i.h
54 | *.ilk
55 | *.meta
56 | *.obj
57 | *.pch
58 | *.pdb
59 | *.pgc
60 | *.pgd
61 | *.rsp
62 | *.sbr
63 | *.tlb
64 | *.tli
65 | *.tlh
66 | *.tmp
67 | *.tmp_proj
68 | *.log
69 | *.vspscc
70 | *.vssscc
71 | .builds
72 | *.pidb
73 | *.svclog
74 | *.scc
75 |
76 | # Chutzpah Test files
77 | _Chutzpah*
78 |
79 | # Visual C++ cache files
80 | ipch/
81 | *.aps
82 | *.ncb
83 | *.opendb
84 | *.opensdf
85 | *.sdf
86 | *.cachefile
87 | *.VC.db
88 | *.VC.VC.opendb
89 |
90 | # Visual Studio profiler
91 | *.psess
92 | *.vsp
93 | *.vspx
94 | *.sap
95 |
96 | # TFS 2012 Local Workspace
97 | $tf/
98 |
99 | # Guidance Automation Toolkit
100 | *.gpState
101 |
102 | # ReSharper is a .NET coding add-in
103 | _ReSharper*/
104 | *.[Rr]e[Ss]harper
105 | *.DotSettings.user
106 |
107 | # JustCode is a .NET coding add-in
108 | .JustCode
109 |
110 | # TeamCity is a build add-in
111 | _TeamCity*
112 |
113 | # DotCover is a Code Coverage Tool
114 | *.dotCover
115 |
116 | # NCrunch
117 | _NCrunch_*
118 | .*crunch*.local.xml
119 | nCrunchTemp_*
120 |
121 | # MightyMoose
122 | *.mm.*
123 | AutoTest.Net/
124 |
125 | # Web workbench (sass)
126 | .sass-cache/
127 |
128 | # Installshield output folder
129 | [Ee]xpress/
130 |
131 | # DocProject is a documentation generator add-in
132 | DocProject/buildhelp/
133 | DocProject/Help/*.HxT
134 | DocProject/Help/*.HxC
135 | DocProject/Help/*.hhc
136 | DocProject/Help/*.hhk
137 | DocProject/Help/*.hhp
138 | DocProject/Help/Html2
139 | DocProject/Help/html
140 |
141 | # Click-Once directory
142 | publish/
143 |
144 | # Publish Web Output
145 | *.[Pp]ublish.xml
146 | *.azurePubxml
147 | # TODO: Comment the next line if you want to checkin your web deploy settings
148 | # but database connection strings (with potential passwords) will be unencrypted
149 | #*.pubxml
150 | *.publishproj
151 |
152 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
153 | # checkin your Azure Web App publish settings, but sensitive information contained
154 | # in these scripts will be unencrypted
155 | PublishScripts/
156 |
157 | # NuGet Packages
158 | *.nupkg
159 | # The packages folder can be ignored because of Package Restore
160 | **/packages/*
161 | # except build/, which is used as an MSBuild target.
162 | !**/packages/build/
163 | # Uncomment if necessary however generally it will be regenerated when needed
164 | #!**/packages/repositories.config
165 | # NuGet v3's project.json files produces more ignoreable files
166 | *.nuget.props
167 | *.nuget.targets
168 |
169 | # Microsoft Azure Build Output
170 | csx/
171 | *.build.csdef
172 |
173 | # Microsoft Azure Emulator
174 | ecf/
175 | rcf/
176 |
177 | # Windows Store app package directories and files
178 | AppPackages/
179 | BundleArtifacts/
180 | Package.StoreAssociation.xml
181 | _pkginfo.txt
182 |
183 | # Visual Studio cache files
184 | # files ending in .cache can be ignored
185 | *.[Cc]ache
186 | # but keep track of directories ending in .cache
187 | !*.[Cc]ache/
188 |
189 | # Others
190 | ClientBin/
191 | ~$*
192 | *~
193 | *.dbmdl
194 | *.dbproj.schemaview
195 | *.jfm
196 | *.pfx
197 | *.publishsettings
198 | node_modules/
199 | orleans.codegen.cs
200 |
201 | # Since there are multiple workflows, uncomment next line to ignore bower_components
202 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
203 | #bower_components/
204 |
205 | # RIA/Silverlight projects
206 | Generated_Code/
207 |
208 | # Backup & report files from converting an old project file
209 | # to a newer Visual Studio version. Backup files are not needed,
210 | # because we have git ;-)
211 | _UpgradeReport_Files/
212 | Backup*/
213 | UpgradeLog*.XML
214 | UpgradeLog*.htm
215 |
216 | # SQL Server files
217 | *.mdf
218 | *.ldf
219 |
220 | # Business Intelligence projects
221 | *.rdl.data
222 | *.bim.layout
223 | *.bim_*.settings
224 |
225 | # Microsoft Fakes
226 | FakesAssemblies/
227 |
228 | # GhostDoc plugin setting file
229 | *.GhostDoc.xml
230 |
231 | # Node.js Tools for Visual Studio
232 | .ntvs_analysis.dat
233 |
234 | # Visual Studio 6 build log
235 | *.plg
236 |
237 | # Visual Studio 6 workspace options file
238 | *.opt
239 |
240 | # Visual Studio LightSwitch build output
241 | **/*.HTMLClient/GeneratedArtifacts
242 | **/*.DesktopClient/GeneratedArtifacts
243 | **/*.DesktopClient/ModelManifest.xml
244 | **/*.Server/GeneratedArtifacts
245 | **/*.Server/ModelManifest.xml
246 | _Pvt_Extensions
247 |
248 | # Paket dependency manager
249 | .paket/paket.exe
250 | paket-files/
251 |
252 | # FAKE - F# Make
253 | .fake/
254 |
255 | # JetBrains Rider
256 | .idea/
257 | *.sln.iml
258 |
259 | # CodeRush
260 | .cr/
261 |
262 | # Python Tools for Visual Studio (PTVS)
263 | __pycache__/
264 | *.pyc
--------------------------------------------------------------------------------
/DotNetSocialBot.Function/RepostOnMastodon.cs:
--------------------------------------------------------------------------------
1 | using DotNetSocialBot.FunctionApp;
2 | using HtmlAgilityPack;
3 | using Mastonet;
4 | using Mastonet.Entities;
5 | using Microsoft.Azure.Functions.Worker;
6 | using Microsoft.Extensions.Logging;
7 |
8 | namespace DotNetSocialBot.Function;
9 |
10 | public class RepostOnMastodon
11 | {
12 | private readonly MastodonClient _client;
13 | private readonly ILogger _logger;
14 | private Account? _currentUser;
15 |
16 | public RepostOnMastodon(ILoggerFactory loggerFactory)
17 | {
18 | _logger = loggerFactory.CreateLogger();
19 | _logger.LogInformation("Initializing function {FunctionName}", nameof(RepostOnMastodon));
20 | var handler = new HttpClientHandler();
21 | #if DEBUG // TODO: find out why certs are not accepted locally
22 | handler.ServerCertificateCustomValidationCallback = (_, _, _, _) => true;
23 | #endif
24 | _client = new MastodonClient(Config.Instance, Config.AccessToken, new HttpClient(handler));
25 | }
26 |
27 | [Function(nameof(RepostOnMastodon))]
28 | public async Task RunAsync([TimerTrigger("0 * * * * *")] TimerInfo myTimer)
29 | {
30 | _logger.LogInformation(
31 | "Started function {FunctionName} at {StartTime}", nameof(RepostOnMastodon),
32 | DateTime.Now);
33 | _currentUser = await _client.GetCurrentUser();
34 | await HandleNotifications();
35 | await BoostTags();
36 | _logger.LogInformation(
37 | "Completed function {FunctionName} at {EndTime}", nameof(RepostOnMastodon),
38 | DateTime.Now);
39 | }
40 |
41 | private async Task HandleNotifications()
42 | {
43 | var notifications = await _client
44 | .GetNotifications(excludeTypes: NotificationType.Follow | NotificationType.Favourite |
45 | NotificationType.Reblog);
46 |
47 | try
48 | {
49 | foreach (var notification in notifications
50 | .Where(n => n.Status?.Account?.Bot != true))
51 | if (!notification.Status.IsReply())
52 | await BoostDirectMention(notification);
53 | else
54 | await BoostBoostRequest(notification);
55 | }
56 | finally
57 | {
58 | await _client.ClearNotifications();
59 | _logger.LogInformation("Cleared all notifications");
60 | }
61 | }
62 |
63 | private async Task BoostBoostRequest(Notification notification)
64 | {
65 | var document = new HtmlDocument();
66 | document.LoadHtml(notification.Status?.Content);
67 | var replyText = document.DocumentNode.InnerText;
68 | if (Config.ValidBoostRequestMessages.Any(m =>
69 | replyText.EndsWith(m, StringComparison.InvariantCultureIgnoreCase)))
70 | {
71 | var statusIdToBoost = notification.Status?.InReplyToId;
72 | if (statusIdToBoost is not null)
73 | {
74 | var statusToBoost = await _client.GetStatus(statusIdToBoost);
75 | if (statusToBoost.IsReply()
76 | || statusToBoost.Account.Bot == true
77 | || statusToBoost.Account.Id == _currentUser!.Id
78 | || statusToBoost.Reblogged == true)
79 | {
80 | await _client.PublishStatus("That's nothing I can boost. 😔",
81 | replyStatusId: notification.Status?.Id);
82 | _logger.LogInformation("Denied boost request from @{Account} from {PostTime}",
83 | notification.Account.AccountName, notification.Status?.CreatedAt);
84 | }
85 | else
86 | {
87 | await _client.Reblog(statusToBoost.Id);
88 | _logger.LogInformation
89 | ("Boosted post from @{Account} from {PostTime}, requested by @{RequesterAccount} at {RequestTime}",
90 | statusToBoost.Account.AccountName,
91 | statusToBoost.CreatedAt,
92 | notification.Account.AccountName,
93 | notification.Status?.CreatedAt);
94 | }
95 | }
96 | }
97 | }
98 |
99 | private async Task BoostDirectMention(Notification notification)
100 | {
101 | var statusId = notification.Status?.Id;
102 | if (statusId is null)
103 | {
104 | _logger.LogError(
105 | "Could not determine ID of status that mentioned me, ignoring post by @{Account} from {PostTime}",
106 | notification.Status?.Account.AccountName,
107 | notification.Status?.CreatedAt);
108 | return;
109 | }
110 |
111 | var statusVisibility = notification.Status?.Visibility;
112 | if (statusVisibility is null)
113 | {
114 | _logger.LogError(
115 | "Could not determine visibility of status that mentioned me, ignoring post by @{Account} from {PostTime}",
116 | notification.Status?.Account.AccountName,
117 | notification.Status?.CreatedAt);
118 | return;
119 | }
120 |
121 | if (statusVisibility == Visibility.Direct)
122 | {
123 | _logger.LogInformation(
124 | "Ignoring direct message post by @{Account} from {PostTime}",
125 | notification.Status?.Account.AccountName,
126 | notification.Status?.CreatedAt);
127 | return;
128 | }
129 |
130 | await _client.Reblog(statusId);
131 | _logger.LogInformation("Boosted post that mentioned me by @{Account} from {PostTime}",
132 | notification.Account.AccountName,
133 | notification.Status?.CreatedAt);
134 | }
135 |
136 | private async Task BoostTags()
137 | {
138 | var followedTags = await _client.ViewFollowedTags();
139 | if (!followedTags.Any()) return;
140 |
141 | foreach (var status in (await _client.GetHomeTimeline(new ArrayOptions { Limit = 100 })).Where(s =>
142 | !s.IsReply()
143 | && s.Reblogged != true
144 | && s.Reblog is null
145 | && s.Account.Bot != true
146 | && s.Account.Id != _currentUser!.Id))
147 | {
148 | var followedTagsInPost = status.Tags.Select(t => t.Name)
149 | .Intersect(followedTags.Select(t => t.Name), StringComparer.OrdinalIgnoreCase).ToList();
150 |
151 | await _client.Reblog(status.Id);
152 | _logger.LogInformation(
153 | "Boosted hash-tagged post by @{Account} from {PostTime} because of followed hashtags {FollowedTagsInPost}",
154 | status.Account.AccountName,
155 | status.CreatedAt,
156 | followedTagsInPost);
157 | }
158 | }
159 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by https://www.toptal.com/developers/gitignore/api/visualstudio,rider,azurite,azurefunctions
2 | # Edit at https://www.toptal.com/developers/gitignore?templates=visualstudio,rider,azurite,azurefunctions
3 |
4 | ### AzureFunctions ###
5 | # Azure Functions localsettings file
6 | local.settings.json
7 |
8 | ### Azurite ###
9 | # Azurite queue
10 | __queuestorage__
11 | __azurite_db_queue__.json
12 | __azurite_db_queue_extent__.json
13 |
14 | # Azurite blob
15 | __blobstorage__
16 | __azurite_db_blob__.json
17 | __azurite_db_blob_extent__.json
18 |
19 | # Azurite table
20 | __azurite_db_table__.json
21 | __azurite_db_table_extent__.json
22 |
23 | ### Rider ###
24 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
25 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
26 |
27 | # User-specific stuff
28 | .idea/**/workspace.xml
29 | .idea/**/tasks.xml
30 | .idea/**/usage.statistics.xml
31 | .idea/**/dictionaries
32 | .idea/**/shelf
33 |
34 | # AWS User-specific
35 | .idea/**/aws.xml
36 |
37 | # Generated files
38 | .idea/**/contentModel.xml
39 |
40 | # Sensitive or high-churn files
41 | .idea/**/dataSources/
42 | .idea/**/dataSources.ids
43 | .idea/**/dataSources.local.xml
44 | .idea/**/sqlDataSources.xml
45 | .idea/**/dynamic.xml
46 | .idea/**/uiDesigner.xml
47 | .idea/**/dbnavigator.xml
48 |
49 | # Gradle
50 | .idea/**/gradle.xml
51 | .idea/**/libraries
52 |
53 | # Gradle and Maven with auto-import
54 | # When using Gradle or Maven with auto-import, you should exclude module files,
55 | # since they will be recreated, and may cause churn. Uncomment if using
56 | # auto-import.
57 | # .idea/artifacts
58 | # .idea/compiler.xml
59 | # .idea/jarRepositories.xml
60 | # .idea/modules.xml
61 | # .idea/*.iml
62 | # .idea/modules
63 | # *.iml
64 | # *.ipr
65 |
66 | # CMake
67 | cmake-build-*/
68 |
69 | # Mongo Explorer plugin
70 | .idea/**/mongoSettings.xml
71 |
72 | # File-based project format
73 | *.iws
74 |
75 | # IntelliJ
76 | out/
77 |
78 | # mpeltonen/sbt-idea plugin
79 | .idea_modules/
80 |
81 | # JIRA plugin
82 | atlassian-ide-plugin.xml
83 |
84 | # Cursive Clojure plugin
85 | .idea/replstate.xml
86 |
87 | # SonarLint plugin
88 | .idea/sonarlint/
89 |
90 | # Crashlytics plugin (for Android Studio and IntelliJ)
91 | com_crashlytics_export_strings.xml
92 | crashlytics.properties
93 | crashlytics-build.properties
94 | fabric.properties
95 |
96 | # Editor-based Rest Client
97 | .idea/httpRequests
98 |
99 | # Android studio 3.1+ serialized cache file
100 | .idea/caches/build_file_checksums.ser
101 |
102 | ### VisualStudio ###
103 | ## Ignore Visual Studio temporary files, build results, and
104 | ## files generated by popular Visual Studio add-ons.
105 | ##
106 | ## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
107 |
108 | # User-specific files
109 | *.rsuser
110 | *.suo
111 | *.user
112 | *.userosscache
113 | *.sln.docstates
114 |
115 | # User-specific files (MonoDevelop/Xamarin Studio)
116 | *.userprefs
117 |
118 | # Mono auto generated files
119 | mono_crash.*
120 |
121 | # Build results
122 | [Dd]ebug/
123 | [Dd]ebugPublic/
124 | [Rr]elease/
125 | [Rr]eleases/
126 | x64/
127 | x86/
128 | [Ww][Ii][Nn]32/
129 | [Aa][Rr][Mm]/
130 | [Aa][Rr][Mm]64/
131 | bld/
132 | [Bb]in/
133 | [Oo]bj/
134 | [Ll]og/
135 | [Ll]ogs/
136 |
137 | # Visual Studio 2015/2017 cache/options directory
138 | .vs/
139 | # Uncomment if you have tasks that create the project's static files in wwwroot
140 | #wwwroot/
141 |
142 | # Visual Studio 2017 auto generated files
143 | Generated\ Files/
144 |
145 | # MSTest test Results
146 | [Tt]est[Rr]esult*/
147 | [Bb]uild[Ll]og.*
148 |
149 | # NUnit
150 | *.VisualState.xml
151 | TestResult.xml
152 | nunit-*.xml
153 |
154 | # Build Results of an ATL Project
155 | [Dd]ebugPS/
156 | [Rr]eleasePS/
157 | dlldata.c
158 |
159 | # Benchmark Results
160 | BenchmarkDotNet.Artifacts/
161 |
162 | # .NET Core
163 | project.lock.json
164 | project.fragment.lock.json
165 | artifacts/
166 |
167 | # ASP.NET Scaffolding
168 | ScaffoldingReadMe.txt
169 |
170 | # StyleCop
171 | StyleCopReport.xml
172 |
173 | # Files built by Visual Studio
174 | *_i.c
175 | *_p.c
176 | *_h.h
177 | *.ilk
178 | *.meta
179 | *.obj
180 | *.iobj
181 | *.pch
182 | *.pdb
183 | *.ipdb
184 | *.pgc
185 | *.pgd
186 | *.rsp
187 | *.sbr
188 | *.tlb
189 | *.tli
190 | *.tlh
191 | *.tmp
192 | *.tmp_proj
193 | *_wpftmp.csproj
194 | *.log
195 | *.tlog
196 | *.vspscc
197 | *.vssscc
198 | .builds
199 | *.pidb
200 | *.svclog
201 | *.scc
202 |
203 | # Chutzpah Test files
204 | _Chutzpah*
205 |
206 | # Visual C++ cache files
207 | ipch/
208 | *.aps
209 | *.ncb
210 | *.opendb
211 | *.opensdf
212 | *.sdf
213 | *.cachefile
214 | *.VC.db
215 | *.VC.VC.opendb
216 |
217 | # Visual Studio profiler
218 | *.psess
219 | *.vsp
220 | *.vspx
221 | *.sap
222 |
223 | # Visual Studio Trace Files
224 | *.e2e
225 |
226 | # TFS 2012 Local Workspace
227 | $tf/
228 |
229 | # Guidance Automation Toolkit
230 | *.gpState
231 |
232 | # ReSharper is a .NET coding add-in
233 | _ReSharper*/
234 | *.[Rr]e[Ss]harper
235 | *.DotSettings.user
236 |
237 | # TeamCity is a build add-in
238 | _TeamCity*
239 |
240 | # DotCover is a Code Coverage Tool
241 | *.dotCover
242 |
243 | # AxoCover is a Code Coverage Tool
244 | .axoCover/*
245 | !.axoCover/settings.json
246 |
247 | # Coverlet is a free, cross platform Code Coverage Tool
248 | coverage*.json
249 | coverage*.xml
250 | coverage*.info
251 |
252 | # Visual Studio code coverage results
253 | *.coverage
254 | *.coveragexml
255 |
256 | # NCrunch
257 | _NCrunch_*
258 | .*crunch*.local.xml
259 | nCrunchTemp_*
260 |
261 | # MightyMoose
262 | *.mm.*
263 | AutoTest.Net/
264 |
265 | # Web workbench (sass)
266 | .sass-cache/
267 |
268 | # Installshield output folder
269 | [Ee]xpress/
270 |
271 | # DocProject is a documentation generator add-in
272 | DocProject/buildhelp/
273 | DocProject/Help/*.HxT
274 | DocProject/Help/*.HxC
275 | DocProject/Help/*.hhc
276 | DocProject/Help/*.hhk
277 | DocProject/Help/*.hhp
278 | DocProject/Help/Html2
279 | DocProject/Help/html
280 |
281 | # Click-Once directory
282 | publish/
283 |
284 | # Publish Web Output
285 | *.[Pp]ublish.xml
286 | *.azurePubxml
287 | # Note: Comment the next line if you want to checkin your web deploy settings,
288 | # but database connection strings (with potential passwords) will be unencrypted
289 | *.pubxml
290 | *.publishproj
291 |
292 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
293 | # checkin your Azure Web App publish settings, but sensitive information contained
294 | # in these scripts will be unencrypted
295 | PublishScripts/
296 |
297 | # NuGet Packages
298 | *.nupkg
299 | # NuGet Symbol Packages
300 | *.snupkg
301 | # The packages folder can be ignored because of Package Restore
302 | **/[Pp]ackages/*
303 | # except build/, which is used as an MSBuild target.
304 | !**/[Pp]ackages/build/
305 | # Uncomment if necessary however generally it will be regenerated when needed
306 | #!**/[Pp]ackages/repositories.config
307 | # NuGet v3's project.json files produces more ignorable files
308 | *.nuget.props
309 | *.nuget.targets
310 |
311 | # Microsoft Azure Build Output
312 | csx/
313 | *.build.csdef
314 |
315 | # Microsoft Azure Emulator
316 | ecf/
317 | rcf/
318 |
319 | # Windows Store app package directories and files
320 | AppPackages/
321 | BundleArtifacts/
322 | Package.StoreAssociation.xml
323 | _pkginfo.txt
324 | *.appx
325 | *.appxbundle
326 | *.appxupload
327 |
328 | # Visual Studio cache files
329 | # files ending in .cache can be ignored
330 | *.[Cc]ache
331 | # but keep track of directories ending in .cache
332 | !?*.[Cc]ache/
333 |
334 | # Others
335 | ClientBin/
336 | ~$*
337 | *~
338 | *.dbmdl
339 | *.dbproj.schemaview
340 | *.jfm
341 | *.pfx
342 | *.publishsettings
343 | orleans.codegen.cs
344 |
345 | # Including strong name files can present a security risk
346 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
347 | #*.snk
348 |
349 | # Since there are multiple workflows, uncomment next line to ignore bower_components
350 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
351 | #bower_components/
352 |
353 | # RIA/Silverlight projects
354 | Generated_Code/
355 |
356 | # Backup & report files from converting an old project file
357 | # to a newer Visual Studio version. Backup files are not needed,
358 | # because we have git ;-)
359 | _UpgradeReport_Files/
360 | Backup*/
361 | UpgradeLog*.XML
362 | UpgradeLog*.htm
363 | ServiceFabricBackup/
364 | *.rptproj.bak
365 |
366 | # SQL Server files
367 | *.mdf
368 | *.ldf
369 | *.ndf
370 |
371 | # Business Intelligence projects
372 | *.rdl.data
373 | *.bim.layout
374 | *.bim_*.settings
375 | *.rptproj.rsuser
376 | *- [Bb]ackup.rdl
377 | *- [Bb]ackup ([0-9]).rdl
378 | *- [Bb]ackup ([0-9][0-9]).rdl
379 |
380 | # Microsoft Fakes
381 | FakesAssemblies/
382 |
383 | # GhostDoc plugin setting file
384 | *.GhostDoc.xml
385 |
386 | # Node.js Tools for Visual Studio
387 | .ntvs_analysis.dat
388 | node_modules/
389 |
390 | # Visual Studio 6 build log
391 | *.plg
392 |
393 | # Visual Studio 6 workspace options file
394 | *.opt
395 |
396 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
397 | *.vbw
398 |
399 | # Visual Studio 6 auto-generated project file (contains which files were open etc.)
400 | *.vbp
401 |
402 | # Visual Studio 6 workspace and project file (working project files containing files to include in project)
403 | *.dsw
404 | *.dsp
405 |
406 | # Visual Studio 6 technical files
407 |
408 | # Visual Studio LightSwitch build output
409 | **/*.HTMLClient/GeneratedArtifacts
410 | **/*.DesktopClient/GeneratedArtifacts
411 | **/*.DesktopClient/ModelManifest.xml
412 | **/*.Server/GeneratedArtifacts
413 | **/*.Server/ModelManifest.xml
414 | _Pvt_Extensions
415 |
416 | # Paket dependency manager
417 | .paket/paket.exe
418 | paket-files/
419 |
420 | # FAKE - F# Make
421 | .fake/
422 |
423 | # CodeRush personal settings
424 | .cr/personal
425 |
426 | # Python Tools for Visual Studio (PTVS)
427 | __pycache__/
428 | *.pyc
429 |
430 | # Cake - Uncomment if you are using it
431 | # tools/**
432 | # !tools/packages.config
433 |
434 | # Tabs Studio
435 | *.tss
436 |
437 | # Telerik's JustMock configuration file
438 | *.jmconfig
439 |
440 | # BizTalk build output
441 | *.btp.cs
442 | *.btm.cs
443 | *.odx.cs
444 | *.xsd.cs
445 |
446 | # OpenCover UI analysis results
447 | OpenCover/
448 |
449 | # Azure Stream Analytics local run output
450 | ASALocalRun/
451 |
452 | # MSBuild Binary and Structured Log
453 | *.binlog
454 |
455 | # NVidia Nsight GPU debugger configuration file
456 | *.nvuser
457 |
458 | # MFractors (Xamarin productivity tool) working folder
459 | .mfractor/
460 |
461 | # Local History for Visual Studio
462 | .localhistory/
463 |
464 | # Visual Studio History (VSHistory) files
465 | .vshistory/
466 |
467 | # BeatPulse healthcheck temp database
468 | healthchecksdb
469 |
470 | # Backup folder for Package Reference Convert tool in Visual Studio 2017
471 | MigrationBackup/
472 |
473 | # Ionide (cross platform F# VS Code tools) working folder
474 | .ionide/
475 |
476 | # Fody - auto-generated XML schema
477 | FodyWeavers.xsd
478 |
479 | # VS Code files for those working on multiple tools
480 | .vscode/*
481 | !.vscode/settings.json
482 | !.vscode/tasks.json
483 | !.vscode/launch.json
484 | !.vscode/extensions.json
485 | *.code-workspace
486 |
487 | # Local History for Visual Studio Code
488 | .history/
489 |
490 | # Windows Installer files from build outputs
491 | *.cab
492 | *.msi
493 | *.msix
494 | *.msm
495 | *.msp
496 |
497 | # JetBrains Rider
498 | *.sln.iml
499 |
500 | ### VisualStudio Patch ###
501 | # Additional files built by Visual Studio
502 |
503 | # End of https://www.toptal.com/developers/gitignore/api/visualstudio,rider,azurite,azurefunctions
504 |
--------------------------------------------------------------------------------