Giter Site home page Giter Site logo

madhead / tyzenhaus Goto Github PK

View Code? Open in Web Editor NEW
14.0 3.0 2.0 142.91 MB

Tyzenhaus is a shared expenses tracking bot.

Home Page: https://t.me/TyzenhausBot

License: GNU General Public License v3.0

Shell 0.86% Kotlin 91.90% Dockerfile 0.19% TypeScript 5.57% HTML 0.15% Less 1.33%
telegram-bot shared-expenses shared-expense-calculator group-expense kotlin ktor dev-inmo-tgbotapi koin hacktoberfest flyio

tyzenhaus's Introduction

Hi there 👋

tyzenhaus's People

Contributors

madhead avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

jorik041 by-onex

tyzenhaus's Issues

/reg command to self-register in a group

  • Welcome message should ask users to invoke a /reg command
  • Reg command should be processed and users should be saved into "members" for this group
  • If the bot sees new members (admin option) it should ask them to register after they are added

Implement ChatCurrenciesService

It should read all the transactions for a given chat, group them by currency and sort (desc) by the number of transactions. Then N top currencies should be returned. 3-5 maybe more, need to check that in different clients.

Basic group expenses tracking

As a Tyzenhaus bot user I want to be able to add the bot to the group to start tracking group expenses. Basic expense tracking must include support of:

  • Single payer
  • Multiple users being paid for
  • Currencies
  • Purpose (text)

I want to be able to ask for my debts stats at any time.

Debt settlement

Bugs found during α

  • /lang shouldn't have any state
  • /expense should check user ids on actions
  • /expense should not allow zeros or empty list of participants
  • Non-participants should not be allowed to create transactions
  • Currencies must be limited to 120-128 chars (current DB limit)
  • There should be a fallback in case the user leves the chat after tracking some transactions
  • When a new user is added to the group AFTER everybody else registered it could break the bot:
    java.util.NoSuchElementException: Collection contains no element matching the predicate.
        at me.madhead.tyzenhaus.core.telegram.updates.expense.DebtsCommandUpdateProcessor$process$debtsMessage$1.invoke(DebtsCommandUpdateProcessor.kt:114) ~[tyzenhaus-core-0.0.1.jar:?]
        at me.madhead.tyzenhaus.core.telegram.updates.expense.DebtsCommandUpdateProcessor$process$debtsMessage$1.invoke(DebtsCommandUpdateProcessor.kt:88) ~[tyzenhaus-core-0.0.1.jar:?]
        at kotlin.text.StringsKt__AppendableKt.appendElement(Appendable.kt:85) ~[kotlin-stdlib-1.5.10.jar:1.5.10-release-890 (1.5.10)]
        at kotlin.collections.CollectionsKt___CollectionsKt.joinTo(_Collections.kt:3344) ~[kotlin-stdlib-1.5.10.jar:1.5.10-release-890 (1.5.10)]
        at kotlin.collections.CollectionsKt___CollectionsKt.joinToString(_Collections.kt:3361) ~[kotlin-stdlib-1.5.10.jar:1.5.10-release-890 (1.5.10)]
        at kotlin.collections.CollectionsKt___CollectionsKt.joinToString$default(_Collections.kt:3360) ~[kotlin-stdlib-1.5.10.jar:1.5.10-release-890 (1.5.10)]
        at me.madhead.tyzenhaus.core.telegram.updates.expense.DebtsCommandUpdateProcessor.process(DebtsCommandUpdateProcessor.kt:85) ~[tyzenhaus-core-0.0.1.jar:?]
        at me.madhead.tyzenhaus.core.telegram.updates.expense.DebtsCommandUpdateProcessor$process$1.invokeSuspend(DebtsCommandUpdateProcessor.kt) ~[tyzenhaus-core-0.0.1.jar:?]
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) [kotlin-stdlib-1.5.10.jar:1.5.10-release-890 (1.5.10)]
    
  • confirmation in /expense should have "Cancel" option
  • it shouldn't be allowed to select participants in another user's transaction

Promotion

Basic analytics

  • Group sizes
  • Who added
  • Group last active
  • Languages (language code for users)
  • Transactions, counters

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.