Giter Club home page Giter Club logo

steamhelper-rs's Introduction

SteamHelper-rs

SteamHelper is (in the future) a modular Rust alternative to popular libraries as C# SteamRE/SteamKit, node.js DoctorMcKay/node-steam-client, and Python ValvePython/steam, to enable interaction with the Steam Network through an easy to follow API.

It can be used to create bots, automate profiles, the possibilities are endless.

The library needs contributors. Check issues that need help and send those PRs in! To learn more about how Steam works, check here.

Crates:

Stable:

  • Steam Trading: Create/Accept/Deny trade offers and confirm them through mobile;
  • Steam Mobile: Generate mobile 2FA codes (library/cli), Register 2FA (library/cli);
  • Tappet: Typed wrapper around Steam Web API. Allows late injection of api key and client reuse. Ergonomic;

Progress Paused:

  • Steam Client: Same functionality as desktop client, go online, answer to messages, etc. Still very WIP;

License

This project is licensed under the MIT license.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in SteamHelper by you, shall be licensed as MIT, without any additional terms or conditions.

steamhelper-rs's People

Contributors

leorii avatar micwoj92 avatar outofbears avatar saskenuba avatar

Stargazers

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

Watchers

 avatar  avatar  avatar

steamhelper-rs's Issues

steam-protobuf: Outdated generated protobuf

After messing around and trying to make the library compile, it would seem that the currently generated protobuf is outdated, along with a new folder that is passed to protoc, causing steam-protobuf to fail its generation.

Discord invite in README has expired

The Discord invitation link in SteamHelper-rs/docs/dev/README.md has expired.

The new link should probably be created with the "Set this link to never expire" option ๐Ÿ˜„

Port steam-totp

We can find in here a reference implementation in node.js of how the 2FA Codes are generated, but how should we deal with the API call? Ideally it should be in a non blocking way. What do you think?

Generate Steam Protobufs

Steam uses Google's Protobuf system for message serialization and communication, instead of JSON for example. On SteamDatabase/Protobufs repository, the protobufs are often dumped from Steam's internals.

Steam also uses an architecture named "Valve's Game Coordinator", which all messages are sent to this system instead of being directly sent to a game server. This relies on the user's account to be online in order to access the system.

At the steam-protobuf crate, the Protobufs module is set up and we are going to generate Rust code from it in order to serialize our messages to Steam. The ideal way would be to generate all protobufs once per update.

This is crucial to any operation involving Steam's Network and should be done next.

Design the reactive event handler architecture

Now that the client is somewhat structured, we can start to think about how messages coming from Steam should propagate through the client, in a way the end-user can interact with them.

While searching for references, two libraries reactive libraries come to mind:

Teloxide and Serenity

Teloxide code is rather intricate, and I not sure I follow it completely.
Serenity is ok.

The event dispatcher:

The user could register "channels" that he is interested, such as SteamFriends(friends messages, friends persona status changes), or SteamUser(logOn, logOff).
This is what SteamKit2 does, and what message goes to which channel is kind arbitrary.

Then, the user can send outgoing messages, or answer to incoming ones based on his callbacks.

The basic flow would be the following, excluding the initial communication and heartbeat:

inc. socket message -> to packet message -> check if handler exists || -> no -> discarded
																			     \
																				   -> yes -> user callback -> message written on socket

We are open to new ideas!

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.