Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@

# pycache
src/__pycache__
src/creds.json

3 changes: 3 additions & 0 deletions .vs/ProjectSettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"CurrentProjectSetting": null
}
Binary file added .vs/slnx.sqlite
Binary file not shown.
1 change: 1 addition & 0 deletions csv/pairings.csv
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
Angel,Mortal
god,adam
12 changes: 12 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1 +1,13 @@
python-telegram-bot==13.13
firebase==3.0.1
firebase-admin==5.2.0
google-api-core==2.7.3
google-api-python-client==2.47.0
google-auth==2.6.6
google-auth-httplib2==0.1.0
google-cloud-core==2.3.0
google-cloud-firestore==2.4.0
google-cloud-storage==2.3.0
google-crc32c==1.3.0
google-resumable-media==2.3.2
googleapis-common-protos==1.56.0
34 changes: 19 additions & 15 deletions src/bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def start_command(update: Update, context: CallbackContext) -> None:
update.message.reply_text(messages.NOT_REGISTERED)
return
# Registers chat id for message sending.
players[playerName].chat_id = update.message.chat.id
players[playerName].setChatId(update.message.chat.id)
logger.info(f'{playerName} started the bot with chat_id {players[playerName].chat_id}.')
update.message.reply_text(
f'Hey {"Angel" if players[playerName].isAngel else "Mortal"} {playerName}!\n\n{messages.WELCOME_TEXT}{messages.HELP_TEXT}')
Expand Down Expand Up @@ -70,11 +70,11 @@ def chat_command(update: Update, context: CallbackContext) -> None:
)


def sendNonTextMessage(message, bot, chat_id) -> None:
def sendNonTextMessage(message, bot, chat_id, messageText) -> None:
if message.photo:
bot.send_photo(
photo=message.photo[-1],
caption=message.caption,
caption=messageText,
chat_id=chat_id
)
elif message.sticker:
Expand All @@ -85,50 +85,54 @@ def sendNonTextMessage(message, bot, chat_id) -> None:
elif message.document:
bot.send_document(
document=message.document,
caption=message.caption,
caption=messageText,
chat_id=chat_id
)
elif message.video:
bot.send_video(
video=message.video,
caption=message.caption,
caption=messageText,
chat_id=chat_id
)
elif message.video_note:
bot.send_video_note(
video_note=message.video_note,
caption=messageText,
chat_id=chat_id
)
elif message.voice:
bot.send_voice(
voice=message.voice,
caption=messageText,
chat_id=chat_id
)
elif message.audio:
bot.send_audio(
audio=message.audio,
caption=messageText,
chat_id=chat_id
)
elif message.animation:
bot.send_animation(
animation=message.animation,
caption=messageText,
chat_id=chat_id
)


def send_msg_command(update: Update, context: CallbackContext) -> None:
playerName = update.message.chat.username.lower()
message = angelOrMortal(playerName, message)
if players[playerName].chat_id is None or players[playerName].partner.chat_id is None:
return
message = angelOrMortal(playerName, update.message)
message = update.message
messageText = angelOrMortal(playerName, update.message)
if message.text:
context.bot.send_message(
text=message.text,
text=messageText,
chat_id=players[playerName].partner.chat_id
)
else:
sendNonTextMessage(message, context.bot, players[playerName].partner.chat_id)
sendNonTextMessage(message, context.bot, players[playerName].partner.chat_id, messageText)


def admin_command(update: Update, context: CallbackContext) -> None:
Expand Down Expand Up @@ -159,19 +163,19 @@ def reset_command(update: Update, context: CallbackContext) -> None:
logger.info('Players have been reset.')


def angelOrMortal(playerName, message):
def angelOrMortal(playerName, message) -> str:
if players[playerName].isAngel:
if message.text:
message.text = '\U0001F47C' + message.text
message = '\U0001F607' + str(message.text or '')
else:
message.caption = '\U0001F47C' + message.caption
message = '\U0001F607' + str(message.caption or '')
return message
else:
if message.text:
message.text = '\U0001f476' + message.text
message = '\U0001F476' + str(message.text or '')
else:
message.caption = '\U0001f476' + message.caption
return message
message = '\U0001F476' + str(message.caption or '')
return message


def main():
Expand Down
12 changes: 12 additions & 0 deletions src/creds.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"type": "service_account",
"project_id": "capt-361017",
"private_key_id": "23e20f983975228ac8d813d311e29d1b8d03afde",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC8WjTjUyj/SwTU\nWQWDZZJIHnu9E4uQRsq8S4ABLsrcIE947lsQmraGbB1hfddJ8OfBd46/3R1eLbZV\n6fOIH/RMnMYy5iLUtHJqo8SBBWrlXhKdOwd405LA7+wYei/sfaAoGcLcDKrgYXjb\njR1x5N1VzWzqDy4HvyZPBEdD/+X8nAM9knFomxD+JFWFmff+RexOxiIjPhihzVl3\njNk9YXv08jgpvnf5vmKNv4HYOF7Kbtqhg3ueg6JpGtrueVBNBRcqrdI5KmNkVY0m\nfDXOCpU1Bj4b/7WNKvgUAf8plMHGEUCA7JSCueM31qpFmqe8DkGUqBO+sbX7XaXJ\npGa3wcGLAgMBAAECggEAI6kQilmcUXlqmKmiGZaJc44R72Jb8hz1FWFWAuNRFQwo\n/8RhCWvBUwH1LhgdQqqRtldkd37tqH8PHoUEzqj+H+Muw0Q/I/ZmEzqeYa8c5gBB\nlfMvHvkvt8e0841utV+ziuQVuIPNdl39+9Nj18R1A2G5VTc6h8zw+9TbiUxRxtmP\nCXOcQfXBMEfYeRG+EaJXadHlhzw1+BhXEQXj8a+eZIn09osctU2QIzUJJlgvt6lk\nGNFw4s+cVSPAjsQu98N1Cz3AL3LiqRdQOjFstcI0L7dkVQRj+0PlD/Ki4T33CozQ\n/KpFhaXP0hFqUWlAXR8Y1F27hRw46NVSGDlXtO+/gQKBgQD6DPXmCYG3PMeRltXK\n80SuJyD/LOl4oimND1Pu9nbWyPwTL9yLzQ5e1Zpqc3dYwcmwPNndFJP2pWD+NPnZ\nrU+/ep3DoSB3/4fNnM0Qj+EaNmpy6eC1GNFRf/pCD9/enfgtXLEt1PicPYAwKtUt\nfuAntxNYwV/7uJ2dDRtvQOkIswKBgQDA1XJWcGNlL0R8nDF1wzKSk7qbbctbaXmP\nzcs3XckjMBSmCeQqjoSobZkzN9TewP0P8FmIVXBELVv+WASLVt6BzbcFktvTYPd6\n2A0VlFfSGpgUOV5cuivCOmlkjQ/94ofA6eaEjikmImuttVqmgdqgJhHYJUSQZcc8\ncwPE0/LfyQKBgQCX7Avyyc/gDrOKB0S52/fcf7WSlCz9uDjalXd/dotZkB9nYOr0\nnY+fmtQI3UKj0InD5BTSN9B2SKCXkoRC9wO+6La1x0282qoeCKim6WPw0yL10pdO\nMFfs1n6saIyx6vSASxLzL7Qk6VDa8ws2ayGxv4+nm0W/4LkSVIZYn+119QKBgEnS\n7Z0OFd9tAyk5mu3ctwXKrMxIcmwiqzlUrhIaQ6DHDYCrlMB+I2df3iDvpP1KoRdz\nCrPZEcvoGan8BHFb5n+HRCRMHwCDxPswr4GtcxmquMI1XFzfoVUQi7zFDHREP3ip\nk2j4C+TflJ3CKlxIpmxdZsN7MQ6fCHGqDq1R/0+RAoGBAK8SF3eu83rYt0sPw2jA\nsroMg336l4FozGU0KKPYmhj7Zd4DrYTn+x+R0DFHJmrZ+VQ5u3Fxg/yb7MUH0tFR\npUVRmXgVua0CB6dx88c7W8h/tTL1PBx0wJ2S5vElfOeiUJUgP/tO7Lr2yAfGlMxc\nMYYA1MzrBg8j5hqhsrxsF/ks\n-----END PRIVATE KEY-----\n",
"client_email": "captbot@capt-361017.iam.gserviceaccount.com",
"client_id": "100672919073175058691",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/captbot%40capt-361017.iam.gserviceaccount.com"
}
1 change: 1 addition & 0 deletions src/messages.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
WELCOME_TEXT = 'The conversation will only start when both sides have started the bot.\n\n'
HELP_TEXT = (
'This bot supports only text, photos, stickers, documents, audio, video, and animations.'
'\n\nPlease note that a message from an Angel will be prefaced by an angel and a message from a mortal will be prefaced by a human. DO NOT MIX UP YOUR CHATS!!!'
'\n\nThe messages will not be recorded. The conversation will automatically end after the event.'
'\n\nUse /help if you want to see this message again.'
)
Expand Down
26 changes: 25 additions & 1 deletion src/player.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
import csv
import logging

logger = logging.getLogger(__name__)
import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore

logger = logging.getLogger(__name__)
cred = credentials.Certificate('creds.json')-
app = firebase_admin.initialize_app(cred)
db = firestore.client()
dbName = u'players'

class Player():
def __init__(self):
Expand All @@ -11,6 +18,17 @@ def __init__(self):
self.chat_id = None
self.isAngel = False

def setChatId(self,id):
self.chat_id = id
docs = db.collection(dbName).where(u'username',u'==',self.username).stream()
result = None
indent = None
for doc in docs:
indent = db.collection(dbName).document(doc.id)
indent.update({
u'chatId' : id
})


# Initialise dict of players from players file
def loadPlayers(players: dict) -> str:
Expand All @@ -28,12 +46,18 @@ def loadPlayers(players: dict) -> str:
playerName = row[0].strip().lower()
partnerName = row[1].strip().lower()

for doc in db.collection(dbName).where(u'username',u'==',playerName).stream(): player = doc.to_dict()

players[playerName].username = playerName
players[playerName].partner = players[partnerName]
players[playerName].chat_id = player["chatId"]
players[playerName].isAngel = True

for doc in db.collection(dbName).where(u'username',u'==',partnerName).stream(): partner = doc.to_dict()

players[partnerName].username = partnerName
players[partnerName].partner = players[playerName]
players[partnerName].chat_id = partner["chatId"]
players[partnerName].isAngel = False

logger.info(f'Angel {playerName} has Mortal {partnerName}.')
Expand Down
28 changes: 28 additions & 0 deletions src/uploader.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import csv
import logging

import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore
logger = logging.getLogger(__name__)
cred = credentials.Certificate('creds.json')
app = firebase_admin.initialize_app(cred)
db = firestore.client()
dbName = u'players2'

with open('C:/Users/fmcmu/Documents/GitHub/capt-buddy-bot/csv/pairings.csv') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
line_count = 0
results = ""
for row in csv_reader:
if line_count == 0:
logger.info(f'Column names are {", ".join(row)}.')
results += f'Column names are {", ".join(row)}.\n'
line_count += 1
else:
playerName = {"username":row[0].strip().lower(),"chatId" :None}
partnerName = {"username":row[1].strip().lower(),"chatId" :None}
db.collection(dbName).add(playerName)
db.collection(dbName).add(partnerName)