Initial commit

This commit is contained in:
Josh Deck 2024-04-24 13:56:08 -04:00
commit 1c5fa2e6c7
2 changed files with 163 additions and 0 deletions

9
.gitignore vendored Normal file
View File

@ -0,0 +1,9 @@
################################################################################
# This .gitignore file was automatically created by Microsoft(R) Visual Studio.
################################################################################
/.vs
/obj
/TwilioDDT.sln
/TwilioDDT.csproj
/Credentials.cs

154
Program.cs Normal file
View File

@ -0,0 +1,154 @@
using System.Data.SqlClient;
using Twilio;
using Twilio.Types;
using Twilio.Rest.Api.V2010.Account;
public class TwilioDDT
{
Dictionary<string, string> results = new Dictionary<string, string>();
public static void Main(string[] args)
{
string PhoneNumber = "";
string[] NumbersToText = ["248-891-3712"];
TextAgent agent = new TextAgent(PhoneNumber, NumbersToText);
var message = "";
var results = agent.SendTexts(message);
Console.WriteLine(results.ToString());
}
public class TextAgent
{
// Class Variables
PhoneNumber PhoneNumber; // Number to send from
string[] InputNumbers = Array.Empty<string>(); // Numbers to blast to
public TextAgent(string ShopNumber, string[] TargetList)
{
PhoneNumber = new PhoneNumber(ShopNumber);
InputNumbers = TargetList;
}
public Dictionary<string, string> SendTexts(string GenericMessage)
{
if (InputNumbers.Length < 1 || GenericMessage.Length < 1)
{
// Input data is invalid; do not initiate sequence
//
return new Dictionary<string, string>();
}
// Initialize SQL Agent
SqlDriver db = new SqlDriver("CONN_STRING");
db.GatherUsers("SQL_QUERY_TO_GET_USERS");
// TODO: read values from table into list
var result = new Dictionary<string, string>();
foreach (string current in InputNumbers) // TODO: replace this with the rows in db
{
// TODO: Use values from SQL list as the fields here
// Logic to add customer's name in the generic message
Console.WriteLine(GenericMessage);
var custName = "Josh Deck"; // Replace with lookup when data is provided
var properMessage = string.Format("Hi {},\nStop in at Global Oil Change Center during the month of May and get $10 Off your Full Synthetic Oil Change and a free set of wiper blades. Show this text to receive discount. From your friends at Global Oil in Troy. Please reply STOP to end texts.", custName);
var currentResult = SendMessage(properMessage, current);
result.Add(currentResult[0], currentResult[1]);
}
return result;
}
private string[] SendMessage(string Message, string Destination)
{
var result = new string[] { };
var DestinationNumber = new PhoneNumber(Destination);
try
{
TwilioClient.Init(Credentials.TwilioSID, Credentials.TwilioAuthToken);
var message = MessageResource.Create(
to: DestinationNumber,
from: PhoneNumber,
body: Message
);
result = [Destination, Message];
}
catch (Exception ex)
{
result = [Destination, ex.Message];
}
return result;
}
}
public class SqlDriver
{
private SqlConnection? conn = null;
private List<Dictionary<string, string>>? data = null;
public SqlDriver(string connectionString)
{
conn = new SqlConnection(connectionString);
}
public void GatherUsers(string query)
{
if (conn == null || data != null)
{
// Report error
return;
}
data = new List<Dictionary<string, string>> { };
using (SqlCommand command = new SqlCommand(query, conn))
{
try
{
conn.Open();
SqlDataReader reader = command.ExecuteReader();
Dictionary<string, string> column;
while (reader.Read())
{
// Empty out the column
column = new Dictionary<string, string>();
// Read the data from the table
// TODO: get actual fields needed
column["NAME"] = reader["NAME"].ToString();
data.Add(column);
}
conn.Close();
}
catch
{
// Handle the error and/or cry
}
}
}
public void ReportText()
{
if (conn == null)
{
// Report error
return;
}
using (SqlCommand command = new SqlCommand("PROCEDURE_NAME", conn) { CommandType = System.Data.CommandType.StoredProcedure })
{
// TODO: add parameters to SP
conn.Open();
command.ExecuteNonQuery();
}
}
}
}