Let there be justice or how to find friends remotely

Hi all. I'm Lyosha, a backend developer, but a little unusual. I can't sit in one place, and I constantly need to do something. That is, if I haven’t left the house or done anything useful during the day, then the day will have been spent in vain. There is not enough article to list everything that I have ever tried, from cooking courses or vocal lessons, to skydiving or the race of heroes. In general, a person with an obvious sharp object in one place.

I was lucky enough to work for a very cool and caring company that met the needs I described above. That is, it paid for the group interests of its employees. So I went with varying consistency to squash, tennis, rock climbing, and the race of heroes. In addition to this, there was also a lot of community – these included board games, singing classes, football, volleyball, a running club and, most likely. something else I couldn't remember. To be honest, such care simply amazed me, and I have never seen anything like it anywhere.

Each community had its own lead, who organized interaction with the site regarding its rental and rental of coaches. And I communicated very well with the leader of tennis. That's where I went to classes most often. And I myself dreamed of learning to play tennis since childhood. Therefore, this community was not indifferent to me.

Members of this community had a problem that they complained about most often. This is a way to sign up for a weekly workout. The fact is that the company allocated a certain budget for each community. And specifically in tennis it was enough for 2 training sessions per week with a maximum capacity of 8 people in a group. At the same time, depending on the season, there were more people than the group could accommodate.

Registration for classes took place through the posting at 12:00 on a certain day of a Google Docs document with public access. Accordingly, at 12:00 the battle began to see who could enter themselves first. Someone was overwriting another person, someone was at a meeting at that moment and could not log in and sign up on time. All in all, it was chaos. And besides, some regular participants got the hang of signing up faster than everyone else, which led to the fact that people who wanted to try at least once were never able to sign up (yes, I was one of those scammers). “It’s somehow unfair. Someone has already attended 3 times in a row, but I can’t sign up even once,” they said.

The community leader and I tried to somehow fix this matter with little expense. I wrote a formula in Excel that, randomly and taking into account those who had already attended the previous training, gave a final list. But it was inconvenient for the lead to copy the telegram group every time, who ultimately goes to training. In addition, this method has one unpleasant side-effect. People signed up for training just in case. When they were selected by a function in excel and the admin sent the list to the telegram group, they missed this message, since many had it on mute.

In addition to excel, I was looking for other solutions. But first of all, I found tools that did not control the number of places or worked with unauthorized users. Well, recording through a separate application / website is not very convenient.

In addition to hobby activities, the company also organized hackathons, where everyone can gather a team or alone do something useful (but not business-related) for the company and employees (and, of course, get achievements). I have already participated in them several times, and an idea came to my mind on how to cover the pain of my favorite tennis players. If the community leads to telegram, then why not sign up there with automation of all the problems described? I have an idea – I’m looking for guys who will help me, because a day to implement it doesn’t seem like enough… I found 3 more enthusiasts. Rolled up our sleeves and grabbed an energy drink. And within 24 hours they wrote a bot.

There is no point in describing technically how it works, since there is no rocket science in the service. I’ll better describe how it works with pictures:

  • The bot is added to the chat with community members.

  • The administrator sets up an event with survey parameters (if the event is regular, then you can multiply it a couple of months in advance).

    enter image description here

    Creating a new event through the bot admin panel

  • The voting panel comes into the chat at the set time, and those who want to participate vote.

    enter image description here

    The first vote sent by the bot to the group

    enter image description here

    Results of the first poll

  • Optionally, at the configured time, a confirmation vote comes with a tagging of those who were noted in the last vote (in case someone’s plans changed).

    enter image description here

    The second vote, which is sent by the bot to the group

  • At the set time, the final list comes with a tag of those who will participate in the event. It is structured as follows: the intersection of the first two lists + randomization, taking into account those who participated in the previous training (so that it does not happen that someone is often unlucky). In addition, a list of reserve participants is published in case someone refuses.

    Example: there are 20 people willing. Training for 8 people. They checked in in the first poll, then 18 out of 20 checked in in the second poll. The final list will consist of 8 participants (priority those who were not at the last training session) and 10 reserves.

    enter image description here

    Final list of participants with substitutions

  • If a person is on the main list, but realizes that he cannot come, he writes to the bot that he wants to refuse, and then automatically a person from the reserve list gets on the main list.

    enter image description here

    Please replace me

    enter image description here

    Bot replaces with the first person from the reserve

  • If there were many substitutions, it is difficult to track who ultimately goes to the event. To do this, there is a command available to the community administrator – display the final list.

    Final list after all substitutions

    Final list after all substitutions

Where can this be useful?

  • Fitness centers that have a limited number of seats (for example, cycle). For example, how I record now. At 00 minutes of a certain hour, a recording opens and the race condition begins (the authorization can be completed – the code is open, we used a separate bot that removed non-employees from the group).

    enter image description here

    Record in my fitness through the application

  • Group lessons in tennis schools or similar institutions.

  • Events where you need to know how many of those who signed up will come to one of the lessons in order to count the number of equipment/facilitators or something like that. For example, we had a case where 20 people signed up for training on the internal portal, and there were from 4 to 12 people in the lessons. And the curator needed to know how many people would be in each lesson.

  • You can come up with the rest of the use cases yourself))

Thus, with the help of this bot we solve the problem of fair distribution of seats. Since the bot is open-source and ready for deployment to the cloud, this will provide organizers (for example, fitness centers) with flexibility and no additional costs, and will also increase user loyalty. For people it will be simple, convenient and pleasant.

Now about the second part of the title. Six months ago I changed jobs. Despite the fact that the company had an office in Moscow, my entire team was distributed, and I saw my colleagues only on Zoom (most often with the cameras turned off). Sometimes I went to the office to socialize, but when you work in a separate team, it’s difficult to walk up to everyone in the office and say, “Hey, I’m so-and-so, let’s chat.” You have no common ground. As a result, I came to the office and only exchanged a few words with someone a couple of times. Sad and not tasty!

There was practically no community in this company, like in my former one. Because of this, there was a feeling that I was working solely for the sake of the salary. I went to the Race of Heroes training a couple of times, but it turned out that there were mostly guys from the holding company that owned the company, and we never crossed paths with them in the office. In general, it was not clear where one could make new acquaintances in such a situation.

And then I remembered that I’ve been going to the same gym for 3 years. Especially often in the last six months trying to heal a heart injury (it really helps). I mostly attend group training (yes, did you think about this picture too?)

enter image description here

I never did the cross splits))

I know a couple of people there, but outside of fitness we don’t communicate anywhere. We exchanged contacts with several and talked about who works where. That's all. And thanks to my fish memory, I forgot half the names as soon as I heard them. And then the question arose: is it possible to turn people who have been going to the same training sessions together for several years into a community? So that it’s not just “hello-bye”, but you can see who’s name is, and see people’s stories, so that you can talk about something and at least somehow indirectly get to know each other. I know an example from my past fitness, when a team was formed from those who constantly went to training and ran the “Race of Heroes”. And now they are friends, go to bars and hang out together. Bingo! This is what I needed! And if the user needs it, then the organizers need it too.

PS This is the fourth week they have been replacing a good coach. And the replacements don't know why. If only there was a group where you could ask the coach personally…

Link to test the bot https://t.me/+u5ZceP9JSChjZTYy
Source code link https://github.com/lashnag/community_bot (don’t be angry about the quality of the code – it was done in hackathon mode)

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *